我正在尝试从Lua将一个表加载到C++中。文件的外观如下:
function alma(arg)
print(arg)
end
sometable = {
num = 5,
text = "this is a string",
nested = {
{"a", alma("argument")},
{"table", alma("arg")},
{"element", alma("asd")}
}
}
如果我打电话给luaL_loadfile
,我只会得到那块。如果我调用lua_dofile
,就会得到元素,但是alma函数会为每个元素运行。在this所以线程中,有人说要将这类东西打包到函数中,并调用它来获取数据。当我包装/调用函数时,3个alma函数在我调用getter时运行。如何在不执行alma函数的情况下获得sometable
及其元素?
发布于 2017-01-14 16:31:48
我希望gui元素有onClick事件,这将是一些函数,因此是{“一些字符串”,函数}表元素。
好的,您需要稍后调用函数。只需保存该函数的值,即只需写出它的名称:
nested = {
{"a", func_argument},
{"table", func_arg},
{"element", func_asd}
}
但是您需要调用相同的函数,传递参数。你想把这些信息作为函数保存起来。因此,要么在表中直接定义一个函数,要么调用某个函数返回另一个函数,将它的args存储在闭包中:
-- function to be called
function alma(arg)
print(arg)
end
-- define functions in table
nested1 = {
{"a", function() alma "argument" end},
{"table", function() alma "arg" end},
{"element", function() alma "asd" end}
}
-- or create function within another function
function alma_cb(name)
return function() alma(name) end
end
nested2 = {
{"a", alma_cb "argument"},
{"table", alma_cb "arg"},
{"element", alma_cb "asd"}
}
发布于 2017-01-14 13:17:47
如果不调用某个函数,就无法获得任何值。加载的任何块都是一个函数。不是数据,而是将构造/返回数据的函数。您必须调用它,因此它将填充一些全局变量,或者显式返回值。
如果你不想让alma()
打电话,那就不要打电话。填充您的表而不调用alma()
。
例如:
return {
num = 5,
text = "this is a string",
nested = {
{"a", "argument"},
{"table", "arg"},
{"element", "asd"}
}
}
您必须加载并调用这个块,它将使用.nested
子表构造和返回表,并且不会调用alma()
。
https://stackoverflow.com/questions/41650231
复制相似问题