2012-04-16 27 views
9

Tôi đã không thực sự chắc chắn làm thế nào để tiêu đề câu hỏi, nhưng xem xét các mã lua sau:Đánh giá khối mã trong một tham số chức năng trong lua

print(function() 
    s = "" 
    for i = 1, 10 do 
     s = s..tostring(i) 
    end 
    return s 
    end) 

Nhưng in này chỉ có địa chỉ chức năng, vì function() trả về một đóng cửa. Có cách nào để đánh giá chức năng ẩn danh không? Giống như trong chương trình mà tôi có thể nắm lấy lambda trong dấu ngoặc đơn bổ sung?

((lambda()(display "Hello World"))) 

Tất nhiên, tôi có thể xác định hàm trước và gọi sau, nhưng tôi chỉ tò mò nếu điều này có thể xảy ra trong lua. Cảm ơn trước cho tất cả các câu trả lời.

Trả lời

14

Bạn cần phải quấn định nghĩa hàm trong dấu ngoặc đơn và sau đó gọi nó bằng cách thêm () sau. Đưa này trong thông dịch Lua:

> print((function() 
    s="" 
    for i=1,10 do 
     s=s..tostring(i) 
    end 
    return s 
    end)()) 

cho đầu ra sau đây

> 12345678910 
+0

cảm ơn, tôi đã có một ý tưởng tương tự nhưng tôi chưa bao hàm chức năng trong dấu ngoặc vuông. trông xấu hơn một chút so với sơ đồ, nhưng ít nhất nó hoạt động: D – Moe

4

Nếu đây là một hành vi toàn cầu mà bạn muốn, giải pháp đơn giản nhất sẽ được treo in để nó đánh giá bất kỳ chức năng truyền cho nó. Bằng cách đó bạn có thể chỉ cần rời khỏi các trang web gọi là lambdas.

+0

khả năng liên quan, tôi chỉ học lua, và không biết bạn có thể làm điều đó. tôi sẽ ghi nhớ – Moe

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