替换呼叫中的表格。

我能替换一个表吗?例如,我无法使其工作:

lua_createtable(L,0,0);
lua_replace(L,2); // 是函数调用的第二个参数
点赞
用户234175
用户234175

你可以使用lua_replace函数将给定索引处的任何Lua值替换为栈顶的值。以下是一个简单的单元测试,它将新的空表移动到位置2,替换当前在那里的任何值:

int test_replace(lua_State *L)
{
  lua_getglobal(L, "_VERSION");
  lua_getglobal(L, "os");
  lua_getglobal(L, "os");
  printstack(L);

  lua_createtable(L, 0, 0);
  lua_replace(L, 2);
  printstack(L);

  return 0;
}

下面是一个简单的printstack函数,用于显示Lua栈中的值:

const char *lprint =
  "function lprint(...)"
  " local _, arg2 = ..."
  " print(...)"
  " return ..."
  " end";

int printstack(lua_State *L)
{
  const int argc = lua_gettop(L);
  lua_getglobal(L, "lprint");
  lua_insert(L, 1);
  lua_call(L, argc, argc);
  return argc;
}

如果你运行test_replace函数,如下所示:

luaL_dostring(L, lprint);

lua_pushcfunction(L, test_replace);
lua_call(L, 0, 0);

可能输出以下结果:

Lua 5.2 table: 00431A10 table: 00431A10

Lua 5.2 table: 00431DD0 table: 00431A10

如果你的代码片段无法工作,则可能是因为你在周围的上下文中做错了一些事情,或者你没有展示出来。

2014-12-22 23:14:36
用户2532220
用户2532220

除非新创建的表以返回值的形式推送,否则它不会在函数外的变量中反映出来,因为在 Lua 中参数始终是按值传递的。

完成这个任务的唯一方法是不创建新表,而是将其附加到你最初使用的表中。你希望保持对原始表的指针不变。

2020-11-19 16:00:27