Lua 5.1 中的 lua_len() 选项是什么?
What is lua_len() alternative in Lua 5.1?
我刚刚将我的项目的 Lua 替换为 LuaJIT,但我收到错误消息
Use of undeclared identifier 'lua_len'
如何更改 lua_len
使其与 Lua 5.1 和 LuaJIT 兼容?
这是我的代码,它使用来自 SWIG 绑定的 lua_len
。 (以防万一)
%typemap(in) (int argc, t_atom *argv)
{
if (!lua_istable(L, $input)) {
SWIG_exception(SWIG_RuntimeError, "argument mismatch: table expected");
}
lua_len(L, $input);
= lua_tointeger(L, -1);
if (!) {
SWIG_exception(SWIG_RuntimeError, "table is empty");
}
= (t_atom *)getbytes( * sizeof(t_atom));
for (int i=0; i<; ++i) {
lua_pushinteger(L, i+1);
lua_gettable(L, $input);
if (lua_isnumber(L, -1)) {
[i].a_type = A_FLOAT;
[i].a_w.w_float = lua_tonumber(L, -1);
}
else if (lua_isstring(L, -1)) {
[i].a_type = A_SYMBOL;
[i].a_w.w_symbol = gensym(lua_tostring(L, -1));
}
else {
SWIG_exception(SWIG_RuntimeError, "unhandled argument type");
}
}
}
您可以使用 lua-compat-5.3 将 lua_len
反向移植到 Lua 5.1。如果你不想要所有这些,你可以通过将它内联到你的接口文件中来使用它的一部分。如果 lua_len
你需要
%{
static void lua_len (lua_State *L, int i) {
switch (lua_type(L, i)) {
case LUA_TSTRING:
lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
break;
case LUA_TTABLE:
if (!luaL_callmeta(L, i, "__len"))
lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
break;
case LUA_TUSERDATA:
if (luaL_callmeta(L, i, "__len"))
break;
/* FALLTHROUGH */
default:
luaL_error(L, "attempt to get length of a %s value",
lua_typename(L, lua_type(L, i)));
}
}
%}
我刚刚将我的项目的 Lua 替换为 LuaJIT,但我收到错误消息
Use of undeclared identifier 'lua_len'
如何更改 lua_len
使其与 Lua 5.1 和 LuaJIT 兼容?
这是我的代码,它使用来自 SWIG 绑定的 lua_len
。 (以防万一)
%typemap(in) (int argc, t_atom *argv)
{
if (!lua_istable(L, $input)) {
SWIG_exception(SWIG_RuntimeError, "argument mismatch: table expected");
}
lua_len(L, $input);
= lua_tointeger(L, -1);
if (!) {
SWIG_exception(SWIG_RuntimeError, "table is empty");
}
= (t_atom *)getbytes( * sizeof(t_atom));
for (int i=0; i<; ++i) {
lua_pushinteger(L, i+1);
lua_gettable(L, $input);
if (lua_isnumber(L, -1)) {
[i].a_type = A_FLOAT;
[i].a_w.w_float = lua_tonumber(L, -1);
}
else if (lua_isstring(L, -1)) {
[i].a_type = A_SYMBOL;
[i].a_w.w_symbol = gensym(lua_tostring(L, -1));
}
else {
SWIG_exception(SWIG_RuntimeError, "unhandled argument type");
}
}
}
您可以使用 lua-compat-5.3 将 lua_len
反向移植到 Lua 5.1。如果你不想要所有这些,你可以通过将它内联到你的接口文件中来使用它的一部分。如果 lua_len
你需要
%{
static void lua_len (lua_State *L, int i) {
switch (lua_type(L, i)) {
case LUA_TSTRING:
lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
break;
case LUA_TTABLE:
if (!luaL_callmeta(L, i, "__len"))
lua_pushnumber(L, (lua_Number)lua_objlen(L, i));
break;
case LUA_TUSERDATA:
if (luaL_callmeta(L, i, "__len"))
break;
/* FALLTHROUGH */
default:
luaL_error(L, "attempt to get length of a %s value",
lua_typename(L, lua_type(L, i)));
}
}
%}