2008-09-27 29 views
5

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' */ 

Trả lời

15

Trích dẫn các man page:

Trong chế độ tương tác ... Nếu một dòng bắt đầu với '=', sau đó lua hiển thị các giá trị của tất cả các biểu thức trong thời gian còn lại của dòng. Các biểu thức phải được phân tách bằng dấu phẩy.

3

Tôi nghĩ rằng đó phải là tính năng của trình thông dịch độc lập. Tôi không thể thực hiện công việc đó trên bất cứ thứ gì tôi đã biên dịch thành lua.

1

Tôi sẽ không gọi nó là một tính năng - trình thông dịch chỉ trả về kết quả của câu lệnh. Đó là công việc của anh ta, phải không?

+0

nhưng tại sao nó không bị sai cú pháp? –

+0

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

0

Bài tập không phải là một biểu thức trả lại nội dung nào đó trong số Lua giống như trong số C.

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