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
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.
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.
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.
- 1. Tuyên bố trả về trong JS Constructors
- 2. Bỏ qua tuyên bố trả về trong C++
- 3. Tuyên bố trả về Scala trong các hàm ẩn danh
- 4. Lua table.getn() trả về 0?
- 5. Tuyên bố về trường hợp trong Slim
- 6. Tuyên bố, tuyên bố, tuyên bố
- 7. Kỳ lạ về cookie trong IE
- 8. Giá trị trả về Lua os.execute
- 9. kABPersonEmailProperty trả về thứ lạ
- 10. Tuyên bố ngầm của luaL_openlibs
- 11. hành vi kỳ lạ với @Transactional (tuyên truyền = Propagation.REQUIRES_NEW)
- 12. Giải thích về mới() tuyên bố này
- 13. mảng rỗng là sai, nhưng trong NẾU tuyên bố nó trả về true
- 14. SQL - TRẢ LỜI TRƯỜNG HỢP - WHEN tuyên bố VÀ tuyên bố
- 15. câu lệnh C kỳ lạ
- 16. Tuyên bố so với tuyên bố đã chuẩn bị về mặt biên dịch
- 17. tuyên bố tuyên bố hàng đầu sai trong scala IntelliJ
- 18. tuyên bố trước về cấu trúc trong C?
- 19. Tuyên bố về phía trước trong C++ là gì?
- 20. Tuyên bố chuẩn bị Mysqli - Trả về False, nhưng tại sao?
- 21. Thread.CurrentPrincipal tuyên bố không chính xác là bất kỳ
- 22. MySQL và Python Chọn các vấn đề về Tuyên bố
- 23. Làm thế nào để đặt một nhãn sau khi một tuyên bố trở lại trong Lua?
- 24. Tuyên bố LIKE của SQL về Loại ngày giờ
- 25. Tham gia để tuyên bố về hoạt động
- 26. Tuyên bố trả về điều kiện Python nào là đa số nhất?
- 27. Tuyên bố trả về của Ruby không hoạt động với từ khóa siêu?
- 28. SELECT tuyên bố trong JAVA
- 29. Chuyển đổi UTC tới giờ địa phương trả về kết quả kỳ lạ
- 30. MYSQL trong bản Tuyên Bố