在LUAC-API中创建表中的表
我使用以下代码在Lua C-API中的表(如命名空间)中创建表:在LUAC-API中创建表中的表,lua,lua-table,lua-api,jnlua,Lua,Lua Table,Lua Api,Jnlua,我使用以下代码在Lua C-API中的表(如命名空间)中创建表: JNIEXPORT void JNICALL Java_com_naef_lua_LuaState_lua_1导入表(JNIEnv*env, jobject对象,jstring名称空间){ 卢厄州*L; JNLUA_ENV(ENV); L=getluathread(obj); char*str=getstringchars(名称空间); 字符**res=NULL; char*p=strtok(str,“.”); int n_空间=
JNIEXPORT void JNICALL Java_com_naef_lua_LuaState_lua_1导入表(JNIEnv*env,
jobject对象,jstring名称空间){
卢厄州*L;
JNLUA_ENV(ENV);
L=getluathread(obj);
char*str=getstringchars(名称空间);
字符**res=NULL;
char*p=strtok(str,“.”);
int n_空间=0,i;
while(p){
res=realloc(res,sizeof(char*)*++n_空格);
如果(res==NULL)
出口(-1);
res[n_空间-1]=p;
p=strtok(空,“.”);
}
对于(i=0;i<(n_空格);+i){
如果(i==0){
新表(L);
}else if(i==(n_空格-1)){
lua_pushlstring(L,res[i],(sizeof(res[i])/sizeof(char))-1;
lua_getglobal(L,res[i]);
打破
}否则{
lua_pushlstring(L,res[i],(sizeof(res[i])/sizeof(char))-1;
新表(L);
}
}
对于(i=(n_空格-2);i>=0;i--){
如果(i==0){
lua_setglobal(L,res[i]);
打破
}否则{
lua_可设置(L,-3);
}
}
免费(res);
}
对于此硬代码,这可以等于:
lua_newtable(L);/*=>堆栈:…,{}*/
{
lua_pushliteral(L,“b”);/*=>堆栈:…,{},“b”*/
lua_newtable(L);/*=>堆栈:…,{},“b”,{}*/
{
lua_pushliteral(L,c);/*==堆栈:…,{},“b”,{},“c”*/
lua_newtable(L);/*==>堆栈:…,{},“b”,{},“c”,{}*/
{
卢厄(L,“d”);
lua_getglobal(L,“MyTable”);
lua_可设置(L,-3);
}
lua_可设置(L,-3);/*=>堆栈:…,{},“b”,{}*/
}
lua_可设置(L,-3);/*=>堆栈:…,{}*/
}
lua_setglobal(L,“a”);/*=>堆栈:*/
当我发送i函数时,Java_com_naef_jnlua_LuaState_lua_1import_1tables()
字符串如下所示:“com.naef.jnlua.test.fixture.TestObject”//TestObject相当于“MyTable”,其他类似于表中的“com”表和TestObject表中的“com”表-最后一个表
当我在这段代码之后尝试时,执行lua codecom.naef.jnlua.test.fixture.TestObject
尝试索引字段“naef”(一个nil值)
我哪里错了