2016-02-21 16 views
8

Tôi đang duyệt một số mã Lua trên Github nơi tôi thấy một số câu lệnh như return Memory.value("game", "textbox") == 1.
Điều này "bình đẳng" return if value ==1 hoặc if value == 1 return true, else return false?Tuyên bố trả về kỳ lạ trong Lua

Trả lời

4

return là một từ khóa và không có điều kiện làm đối số, thay vì một biểu thức. Nếu bạn tuyên bố rõ ràng return, nó S W sẽ trả lại. Nó đánh giá các đối số của nó tuy nhiên, đó là khi khía cạnh hợp lý đi vào chơi.

Tôi sẽ đi vào khía cạnh hợp lý.

== là toán tử so sánh, nó kiểm tra xem đối số của nó là bằng nhau hay không. Nếu nó trả về đúng sự thật. Vì vậy, khi được sử dụng trong một return, return sẽ đánh giá và trả về true nếu chúng bằng nhau.

này không giới hạn ==, bất kỳ toán tử so sánh (~=, <=, >=, <, >) sẽ làm chính xác cùng một điều.

and, or hoạt động hơi khác một chút. Họ không trả lại đúng/sai.Dưới đây là cách họ cư xử:

return a and b: Đây cơ bản để đánh giá nếu a là đúng (không sai cũng không nil) trở lại b

return a or b: Đây về cơ bản dịch để * nếu a là đúng (không sai cũng không nil) trả lại một, nếu không trở lại b

vì vậy, như bạn có thể tưởng tượng, một cái gì đó giống như return a and b or c nghĩa

if a then 
    if b then 
     return b 
    else 
     return c 
    end 
else 
    return c 
end 

vì vậy return a and b or c là tương đương với return ((a and b) or c)

Và đối với mục đích hoàn chỉnh, not đơn giản đánh giá nó và đảo ngược nó, vì vậy nếu nó sai/nil nó trả về true, nếu không trả về false.

9

Tuyên bố return mong đợi một biểu thức làm đối số của nó. Điều đó có nghĩa là nếu bạn viết return expression, giá trị được đánh giá là expression sẽ được trả lại.

Trong trường hợp cụ thể này, Memory.value("game", "textbox") == 1 là một biểu thức đánh giá là true nếu giá trị trả lại là Memory.value("game", "textbox") bằng 1. Nếu Memory.value("game", "textbox") là một giá trị khác với 1, biểu thức sẽ đánh giá là false, đó là câu lệnh return sẽ trả về.

Bạn có thể dễ dàng viết báo cáo kết quả đưa ra là

if (Memory.value("game", "textbox") == 1) then 
    return true 
else 
    return false 
end 

Nhưng vì đây là một cách logic không cần thiết, bạn sẽ muốn tránh phải viết mã này và thay vào đó sử dụng một trong lót mà bạn cung cấp.

5

Câu hỏi của bạn nói rằng bạn biết Perl. Không, nó không giống như Perl, nơi mà điều kiện của `if 'và các câu lệnh tương tự có thể theo sau câu lệnh.

return hy vọng danh sách không có hoặc nhiều giá trị trả lại. Một hàm có thể trả về bất kỳ danh sách độ dài nào. Nó cũng có thể có bất kỳ số báo cáo trả về nào và chúng không cần trả lại danh sách có cùng độ dài hoặc ý nghĩa. Vì vậy, tài liệu của hàm là rất cần thiết. Xem load làm ví dụ.

Bảng sao kê này trả về true hoặc false.

Nó xử lý các giá trị tham chiếu bởi Memory như một bảng, chỉ số nó với "giá trị", gọi là giá trị kết quả như một chức năng với hai đối số chuỗi và so sánh kết quả của lời gọi hàm với giá trị 1.

Các vấn đề liên quan