1

只是在计算机技术中乱搞,试图使用一个函数作为参数,但不能让它工作

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

我想做一些如上所述的事情,但是使用工作代码而不是这种废话

4

3 回答 3

7

()从参数中删除execfunc. 你想传递blaexecfuncnot 调用的结果bla()

> bla = function() return "bla" end
> execfunc = function(func) print(type(func)) end
> execfunc(bla())
string
> execfunc(bla)
function
于 2014-08-28T19:31:50.683 回答
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)
于 2014-08-29T09:13:11.413 回答
0

您在形式参数方面已经做到了:()在表达式上使用函数调用运算符func。如果表达式的值实际上是一个函数,它将被调用;如果没有,Lua 会抛出一个错误。

在实际的争论方面,你有一个错误。要传递参数,只需在参数列表中放置一个表达式。您想传递变量中的值blaso 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.
于 2014-08-29T02:40:11.423 回答