Function 如何在Lua中将函数作为参数传递?
被这一切搞糊涂了;这就是我想要做的! 有这样一个定义:Function 如何在Lua中将函数作为参数传递?,function,lua,Function,Lua,被这一切搞糊涂了;这就是我想要做的! 有这样一个定义: block_basic_DEF = { image = "button.png", name = "basic block", obj_table = this_obj_table.common_objects_table, startup = function() init(), <----- This is the problem } 在该block\u basic\u DEF中,我希望传递ini
block_basic_DEF =
{
image = "button.png",
name = "basic block",
obj_table = this_obj_table.common_objects_table,
startup = function() init(), <----- This is the problem
}
在该block\u basic\u DEF
中,我希望传递init()
函数的地址,以便在我的spawn中执行以下操作:
params.startup()
——即实际调用原始的init函数Lua函数只是值,您可以使用它们的名称而不使用paren来关联它们:
function init()
print("init");
end
block = {
startup = init
}
然后像调用正则函数一样调用它
block.startup()
它接近OOP,但事实上,它与函数是正常值这一事实一样简单
如果您想要更类似于lambda的函数,则必须拼写整个函数,省略名称:
startup = function() print("init") end
您刚刚忘记了
end
关键字。它是函数定义的一部分,您不能忽略它。你也不会在C语言中省略结束语}
,对吗
block_basic_DEF =
{
image = "button.png",
name = "basic block",
obj_table = this_obj_table.common_objects_table,
startup = function() init() end, -- <-- This was the problem
}
“有一个def,所以”这不是“def”。Lua没有“定义”。这是一个表,它是一个值。与函数一样。
params.startup()
实际上将params
引用的值视为一个表,并使用字符串startup
对其进行索引以获取其值(点运算符)。然后将该值作为函数调用(括号运算符)。然后,该函数将init
引用的值作为函数调用。谢谢!。问题是我的init()函数是在我引用它之后定义的。我更喜欢将定义和数据放在文件顶部,而不是放在整个文件中(我也总是觉得很凌乱)。如何转发参考资料?正确使用的CheersLambda函数并不凌乱。是时候放弃古老的C习惯用法,继续:)@MarkHula:对于正向引用,您需要在文件顶部声明要使用的变量。如果它是局部变量,您可以使用localvar1、var2、var3
行声明它们。如果声明太多名称很难看,则可以声明单个“名称空间”表local M={}
,然后使用字段作为变量:M.var1=…
。最后,除了名称空间表是隐式的之外,全局变量也是这样工作的。但是,如果您要声明一个局部函数
,则语法不是100%相等的。为了能够递归调用函数,您需要在赋值之前声明变量:localfoo;foo=function()end
这正是代码示例中没有local
的原因;)
block_basic_DEF =
{
image = "button.png",
name = "basic block",
obj_table = this_obj_table.common_objects_table,
startup = function() init() end, -- <-- This was the problem
}
function foo()
end
foo = function()
end