首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加载Lua文件并使用变量而不执行函数

加载Lua文件并使用变量而不执行函数
EN

Stack Overflow用户
提问于 2017-01-14 12:59:46
回答 2查看 630关注 0票数 1

我正在尝试从Lua将一个表加载到C++中。文件的外观如下:

代码语言:javascript
运行
复制
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及其元素?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-14 16:31:48

我希望gui元素有onClick事件,这将是一些函数,因此是{“一些字符串”,函数}表元素。

好的,您需要稍后调用函数。只需保存该函数的值,即只需写出它的名称:

代码语言:javascript
运行
复制
nested = {
    {"a", func_argument},
    {"table", func_arg},
    {"element", func_asd}
  }

但是您需要调用相同的函数,传递参数。你想把这些信息作为函数保存起来。因此,要么在表中直接定义一个函数,要么调用某个函数返回另一个函数,将它的args存储在闭包中:

代码语言:javascript
运行
复制
-- 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"}
}
票数 2
EN

Stack Overflow用户

发布于 2017-01-14 13:17:47

如果不调用某个函数,就无法获得任何值。加载的任何块都是一个函数。不是数据,而是将构造/返回数据的函数。您必须调用它,因此它将填充一些全局变量,或者显式返回值。

如果你不想让alma()打电话,那就不要打电话。填充您的表而不调用alma()

例如:

代码语言:javascript
运行
复制
return {
  num = 5,
  text = "this is a string",

  nested = {
    {"a", "argument"},
    {"table", "arg"},
    {"element", "asd"}
  }
}

您必须加载并调用这个块,它将使用.nested子表构造和返回表,并且不会调用alma()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41650231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档