2014-08-28 111 views
1

只是瞎搞在computercraft,试图用一个函数作为参数,但不能让它的工作使用函数作为变量,LUA

bla = function() print("bla") end 
execfunc = function(func) func() end 
execfunc(bla()) 

我想做些事情由上述可见,但随着工作的代码而不是这个废话

回答

6

从参数中删除()execfunc。您想通过blaexecfunc而不是致电bla()的结果。

> bla = function() return "bla" end 
> execfunc = function(func) print(type(func)) end 
> execfunc(bla()) 
string 
> execfunc(bla) 
function 
0

你这样做是正确的形式参数方面:使用函数调用操作()上表达func。如果表达式的值实际上是一个函数,它将被调用;如果不是,Lua会抛出一个错误。

在实际的论证方面,你有一个错误。要传递参数,只需在参数列表中添加一个表达式即可。您想要将变量bla中的值传递到execfunc(bla)。表达式只是一个变量,而变量中的值是一个函数值,这一事实不会改变任何事实。

Lua变量是动态类型的。编译器不会跟踪哪些变量在使用之前会被最后赋予函数值。事实上,它不能。你可以写一个函数,有时会返回一个函数,有时会返回一个数字。无论哪种情况,您仍然可以尝试调用结果。

local f = function() 
    if Wednesday then 
     return 7 
    else 
     return function (n) return n + 1 end 
    end 
end 

local g = f() 
g() -- is the value in g a function or not? It doesn't matter to the compiler. 
+0

很长一段时间了,不过,谢谢你非常,这有帮助 – user3837761 2014-10-16 18:32:31

0

,你得到你的函数原料,而不调用它的方式是不使用括号()

local function a() 
    print("AAA") 
end 

local function b(func) 
    func() 
end 

b(a) 
-- Output: 
-- AAA 

,并为您的情况:

... 
execfunc(bla) 
-- Everything was fine except the parenthesis for your function (bla)