2013-05-17 28 views
5

Tôi mong muốn sử dụng biến như "asdf" thay vì viết hàm tên để kiểm tra lại (thay đổi ngay bây giờ và sau đó). Đó là lý do tại sao biến "asdf" nên cập nhật giá trị của nó mỗi khi chúng tôi sử dụng (gọi) làgọi hàm Lua chỉ bằng cách viết tên của nó (không có dấu ngoặc đơn)

Có cách nào để thực hiện việc này trong Lua không?

asdf == getFunction() --we define it here 

    (...)   --some code 

if asdf < 10 then ... --here we call the variable (so it should get/update again the result of getFunction()) 

nhờ

+1

Bạn ghét ngoặc rất nhiều? –

+0

Lisp có một tính năng như thế này (biểu tượng macro) – finnw

+0

@ user2308704 Từ những gì bạn đã chỉ ra trong các ý kiến ​​của bạn cho đến nay, có vẻ như bạn đang cố gắng giải quyết vấn đề sai. Có lẽ bạn nên suy nghĩ lại bất cứ điều gì bạn đang cố gắng để làm gì? Như câu trả lời cho thấy, làm một cái gì đó như thế này không phải là _impossible_ mỗi se, nhưng nó chắc chắn bất thường và nên không cần thiết trong hầu hết các trường hợp. – Cubic

Trả lời

12
--we define it here 
local asdf = function() 
    return getFunction() 
end 

--some code 
(...)    

--here we call the variable 
--(so it should get/update again the result of getFunction()) 
if asdf() < 10 then ... 

UPD:
Giải pháp mà không cần ngoặc

--we define it here 
asdf = nil 
setmetatable(_G, {__index = 
    function(t, k) 
     if k == 'asdf' then 
     return getFunction() 
     end 
    end 
}) 

--some code 
(...) 

--here we call the variable 
--(so it should get/update again the result of getFunction()) 
if asdf < 10 then ... 
+1

yea, nhưng vấn đề ở đây là tôi sẽ phải sử dụng những dấu ngoặc đơn "asdf()", không phải là bất kỳ cách nào khác? = ( – user2308704

+0

@ user2308704 - Bạn có gặp vấn đề với dấu ngoặc đơn trên bàn phím không? –

+0

@ user2308704 - Hoặc có thể bạn đang tạo một số DSL dựa trên Lua? –