Tôi có hàm lua có nhiều tham số và trả về nhiều giá trị khi có tham số. Mỗi giá trị trả lại tương ứng với tham số. Để minh họa, hãy xem xét một chức năng mà đọc giá trị cho một cặp khóa/giá trị từ một cơ sở dữ liệu:Thực hành tốt nhất để trả về lỗi từ hàm lua trả về nhiều giá trị
val1, val2, val3 = my_function("key1", "key2", "key3");
val1 = my_function("key1");
cách tốt nhất để trả lại một lỗi từ my_function
là gì? (ví dụ: nếu "khóa" được cung cấp không hợp lệ)
Tôi hiểu một cách là trả về hai giá trị do lỗi, nil
và chuỗi lỗi. Đây có phải là cách tiếp cận tốt nhất không? Ví dụ:
val1, val2, val3 = my_function("key1", "key2", "key3");
if val1 then
-- Use val1, val2, and val3.
else
print("ERROR: " .. val2);
end
Sửa
Một số điểm bổ sung:
- Kịch bản lua đang được thực hiện từ bên trong một chương trình C sử dụng
lua_pcall()
. - Chương trình C không được hủy nếu tập lệnh không thành công.
my_function()
được triển khai trong C.- Khi
my_function()
không thành công, nó cũng phải trả về mã lỗi (hoặc thông báo) cho biết lý do không thành công.
Tôi đã chỉnh sửa câu hỏi để làm rõ một vài điểm. Vì kịch bản lệnh lua (mà cuối cùng gọi 'my_function()') được chạy từ C với 'lua_pcall()', nên 'my_function()' trả về biến "ok" như bạn đã mô tả ở trên? (ví dụ: 'ok, val1, val2, val3 = my_function()'). – Ben
@Ben, vâng, tôi sẽ bao gồm một giá trị 'ok' bổ sung - có vẻ là cách sạch nhất. Tôi cũng khuyên bạn nên sửa đổi trong thiết kế; kể từ khi cả hai chức năng trong C, nó có thể sẽ được đơn giản hơn (và nhanh hơn) để quên về Lua và chỉ làm tất cả mọi thứ trong C. – kikito
@ kikto, nhờ làm rõ. Trong trường hợp này, nó có ý nghĩa đối với tôi khi sử dụng lua (hoặc tương đương) để mở rộng sản phẩm. – Ben