C++ 加载Lua文件并使用变量而不执行函数
我试图从Lua加载一个表到C++中。以下是文件的外观:C++ 加载Lua文件并使用变量而不执行函数,c++,lua,C++,Lua,我试图从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\u loadfile我只得到
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\u loadfile
我只得到块。如果我调用lua\u dofile
我会得到元素,但是alma函数会为每个元素运行。在SO线程中,有人说要将这些类型的内容包装到函数中,然后调用这些函数来获取数据。当我包装/调用函数时,3个alma函数在调用getter时运行。如何在不执行alma函数的情况下获取sometable
及其元素?如果不调用某个函数,则无法获取任何值。加载的任何块都是一个函数。不是数据,而是构造/返回数据的函数。您必须调用它,这样它将填充一些全局变量,或显式返回值。如果不想调用
alma()
,则不要调用它。填写表格,无需调用alma()
例如:
return {
num = 5,
text = "this is a string",
nested = {
{"a", "argument"},
{"table", "arg"},
{"element", "asd"}
}
}
您必须加载并调用此块,它将构造并返回带有.nested
子表的表,并且不会调用alma()
我想为gui元素提供onClick事件,这将是
一些函数,因此是{“some string”,function}表元素
好的,您需要稍后调用函数。只需保存该函数的值,即只需写下其名称:
nested = {
{"a", func_argument},
{"table", func_arg},
{"element", func_asd}
}
但您希望调用相同的函数,传递参数。您希望将该信息保存为函数。因此,要么直接在表中定义一个函数,要么调用将返回另一个函数的函数,将其参数存储在闭包中:
-- 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"}
}
所以我不能像那样嵌套函数,如果我想避免在加载时自动调用函数,我必须避免在数据中引用函数?感觉像涉及XY问题。你坚持要有函数,但不想调用它们。你的具体任务是什么?你想实现什么?我想在Lua中编写GUI数据,并将其加载到C++中,这样我就不必在程序稍作调整时继续编译程序,而且我想对GUI元素进行OnCutt事件,这将是一些函数,因此{“某些字符串”,函数}表元素。您可以在表上使用metatable来实现该表中某些元素的惰性计算。因此,只有当您第一次访问相应的元素时,
alma
才会被调用。此功能是透明的:您不必显式调用某些函数。@val,关键是函数是一个值。它没有名称,但可能有一个或多个变量或字段引用它。