如何从lua脚本调用C++函数时获得多个返回值?

如何在 lua 脚本中获取 SomeFunction() 的返回值,当调用函数时大小未知时?

// c++函数定义
int LS_SomeFucntion(LuaState* state)
{
LuaStack args(state);
//..
set<int>::iterator it = mySet.begin();
for(; it != mySet.end(); ++it)
{
    state.pushInteger(*it);
}
return mySet.size();

}

state->GetGlobals().Register("SomeFunction",LS_SomeFunction);

// lua脚本
??? = SomeFunction()

原文链接 https://stackoverflow.com/questions/4130757

点赞
stackoverflow用户501459
stackoverflow用户501459

你可以将所有的返回值捕获到一个表中:

local rv = { SomeFunction() }

print('SomeFunction 返回了', #rv, '个值')
for i,val in ipairs(rv) do
    print(i,val)

或者使用变长参数列表来处理它们:

function DoSomething(...)
   local nargs = select('#', ...)
   print('收到了', nargs, '个参数')
   for i=1,nargs do
      print(i,select(i,...))
end

DoSomething(SomeFunction())

当然,你的 C 函数应该只返回包含列表项的 Lua 表。我不熟悉 LuaPlus,但根据文档 这里 的判断,你需要这样做:

int LS_SomeFunction(LuaState* state)
{
   LuaObject table;
   table.AssignNewTable(state, mySet.size()); // 预设数组部分大小

   int i = 1;
   for(set<int>::iterator it = mySet.begin(); it != mySet.end(); ++it)
       table.SetNumber(i++, *it);

   table.PushStack();
   return 1;
}

然后你只需这样说:

local rv = SomeFunction()
print('SomeFunction 返回了', #rv, '个值')
2010-11-09 05:29:24