在lua中使用函数作为参数

时间:2014-08-28 19:21:56

标签: lua computercraft

只是搞乱计算机技术,尝试使用函数作为参数,但无法使其工作

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

我想做一些如上所示的事情,但是使用工作代码而不是这些无意义的

3 个答案:

答案 0 :(得分:6)

()从参数中删除到execfunc。您希望将bla传递给execfunc而不是调用bla()的结果。

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

答案 1 :(得分: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.

答案 2 :(得分: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)