加载 Lua 文件并使用变量而不执行函数
Load Lua file and use variables without executing functions
我正在尝试从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 函数为每个元素运行。在这个SO线程中,有人说将这些东西包装到函数中并调用它来获取数据。当我包装/调用函数时,3 个 alma 函数在我调用 getter 的那一刻运行。如何在不执行 alma 函数的情况下获取sometable
及其元素?
我希望为 gui 元素提供 onClick 事件,这将是 一些函数,因此 {"一些字符串",函数} 表元素
好的,您需要稍后调用函数。只需保存该功能的值,即简单地写下它的名称:
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"}
}
如果不调用某个函数,就无法获取任何值。加载的任何块都是一个函数。不是数据,而是构造/返回数据的函数。你必须调用它,这样它才会填充一些全局变量,或者显式返回值。
如果你不想alma()
被召唤,那就不要叫它。填满你的桌子,不要打电话给alma()
。
例如:
return {
num = 5,
text = "this is a string",
nested = {
{"a", "argument"},
{"table", "arg"},
{"element", "asd"}
}
}
您必须加载并调用此块,它将构造并返回带有子表.nested
表,并且不会调用alma()
。
相关文章:
- 执行函数时导致崩溃的变量
- 在多个时间戳处执行函数
- 程序不会执行函数 c++
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在 c++ 的类声明中执行函数?
- 从 std::vector 迭代器中执行函数指针
- 异步 60 秒延迟后C++执行函数?
- 如果发生错误,则返回错误值,否则,继续执行函数
- 执行函数两次
- C++11:如何在 n 秒后在主线程中执行函数
- C++执行函数和 lambda 内部
- 从主线程C 11执行函数调用的线程
- 现代C++执行函数返回指针的方法
- 为什么Win API线程执行函数,而标准线程则没有
- varargs宏以执行函数调用或将其转换为字符串
- 单步执行函数,但不进入VS2017的参数评估
- 加载 Lua 文件并使用变量而不执行函数
- 尽可能在编译时执行函数契约
- 在QT应用程序中创建并执行函数
- 如何使用boostsio_service.post()执行函数并使用数组或指针作为参数