我正在尝试从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 SO线程中,有人说要将这些东西包装成函数并调用它来获取数据。当我打包/调用函数时,3个alma函数在我调用getter时运行。如何在不执行alma函数的情况下获取sometable
及其元素?
答案 0 :(得分:2)
我想为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"}
}
答案 1 :(得分:1)
如果不调用某些功能,您将无法获得任何价值。任何加载的块都是一个函数。不是数据,而是构造/返回数据的函数。您必须调用它,因此它将填充一些全局变量,或显式返回值
如果您不想呼叫alma()
,请不要拨打电话。在不致电alma()
的情况下填写表格
例如:
return {
num = 5,
text = "this is a string",
nested = {
{"a", "argument"},
{"table", "arg"},
{"element", "asd"}
}
}
您必须加载并调用此块,它将构建并返回带有.nested
子表的表,并且alma()
不会被调用。