Trong Lua, sử dụng toán tử = không có l-giá trị có vẻ là tương đương với một bản in (r-value), dưới đây là một vài ví dụ chạy trong Lua độc lập thông dịch viên:Lua = điều hành như in
> = a
nil
> a = 8
> = a
8
> = 'hello'
hello
> = print
function: 003657C8
Và cứ thế ...
Câu hỏi của tôi là: Tôi có thể tìm mô tả chi tiết về cách sử dụng này cho toán tử = ở đâu? Làm thế nào nó hoạt động? Có phải bằng cách ngụ ý giá trị l mặc định đặc biệt không? Tôi đoán là gốc của vấn đề của tôi là tôi không có đầu mối gì để gõ vào Google để tìm thông tin về nó :-)
chỉnh sửa:
Cảm ơn câu trả lời, bạn là đúng đó là một tính năng của thông dịch viên. Câu hỏi ngớ ngẩn, vì tôi không biết lý do nào tôi hoàn toàn bỏ qua điều hiển nhiên. Tôi nên tránh gửi bài trước :-) cà phê buổi sáng Để hoàn chỉnh, đây là mã giao dịch với điều này trong phiên dịch:
while ((status = loadline(L)) != -1) {
if (status == 0) status = docall(L, 0, 0);
report(L, status);
if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */
lua_getglobal(L, "print");
lua_insert(L, 1);
if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0)
l_message(progname, lua_pushfstring(L,
"error calling " LUA_QL("print") " (%s)",
lua_tostring(L, -1)));
}
}
edit2:
Để được thực sự hoàn chỉnh, toàn bộ lừa về đẩy các giá trị trên ngăn xếp nằm trong chức năng "pushline":
if (firstline && b[0] == '=') /* first line starts with `=' ? */
lua_pushfstring(L, "return %s", b+1); /* change it to `return' */
nhưng tại sao nó không bị sai cú pháp? –
Chẳng phải nó cũng in 8 trên "a = 8" phải không? Tôi biết nhiều bàn giao tiếp scriping làm điều đó (python, irb, perl -d -e 0 vv), nhưng tôi chỉ thử nó LUA không in giá trị của tất cả các báo cáo, chỉ cần "= ...". – jkramer