我正在尝试从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线程中,有人说将这些东西包装到函数中,然后调用该函数以获取数据。当我包装/调用该函数时,我调用 setter/getter 的那三个Alma函数就会运行。如何在不执行alma函数的情况下获取sometable及其元素?

最佳答案



好的,您需要稍后调用的函数。只需保存该功能的值(value)即可,即只需写下其名称即可:

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"}
}

关于c++ - 加载Lua文件并使用变量而不执行功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41650231/

10-11 23:17