lua官方的解释器为保证lua解释器的可移植性和可嵌入性,用纯ANSI C写的,即其中只有保持最大兼容要求的标准C语言代码……通俗点说,没有使用任何各种编译器的方言语法以及更高版本的C语言语法,甚至没有使用复杂的函数库,在通俗点说就是只引入了std开头的那些C语言库,比如说常见的stdio.h和stdlib.h……
但是嵌入性是lua解释器的基本要求之一,你可以将其嵌入到自己的程序里面作为扩展,其本身也具有很强的扩展性,所以如果你问lua解释器本身,毫无疑问是C语言,如果是嵌入了lua的产品可能成分就并不单纯了……
源码可在此处下载到,整个源码只有五百来K,感兴趣可以看一下:
http://www.lua.org/download.html
调用 GetLuaVar(luastate,"Project.A.one") 把Project.A.one的值取到堆栈上,然后根据类型自己用 lua_tonumber(luastate, -1) 或 lua_tostring(luastate, -1)得数据void GetLuaVar(lua_State* pLuaState,const char* strVarName){const char* pIndS = strVarNameconst char* pIndE = strVarNameT_B8 bParts = false//判断是否分两部分,因为第一部分要用lua_getglobal,其他部分用lua_gettablewhile( 0 != *pIndE ){if( '.' == *pIndE ){if(bParts){lua_pushstring(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())lua_gettable(pLuaState,-2)lua_remove(pLuaState,-2)}else{lua_getglobal(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())bParts = true}++pIndEpIndS = pIndE}else{++pIndE}}if(bParts){lua_pushstring(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())lua_gettable(pLuaState,-2)lua_remove(pLuaState,-2)}else{lua_getglobal(pLuaState,std::string(pIndS,pIndE - pIndS).c_str())}}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)