Lua中共享upvalue是个怎么样的用法?
今天看云风的enjoy2D源码,发现有个Lua的upvalue用法不太明白,简单的测试代码如下
test.cpp
#include<iostream>
extern "C"
{
#include"lua.h"
#include"lauxlib.h"
#include"lualib.h"
}
using namespace std;
static int
ltest(lua_State *L)
{
lua_getfield(L, lua_upvalueindex(1), "a");
cout << lua_tointeger(L, -1) << endl;
return 1;
}
static int
luaTest(lua_State *L)
{
luaL_Reg l[] =
{
{"test",ltest},
{NULL,NULL},
};
luaL_newlibtable(L, l);
lua_pushvalue(L, -1);
luaL_setfuncs(L, l, 1);
return 1;
}
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_requiref(L, "LuaTest", luaTest, 0);
luaL_dofile(L, "a.lua");
return 0;
}
a.lua
local c=require"LuaTest"
c.a=50
c.test()
为什么对LuaTest这个模块设置一个表作为上值之后,直接用“a”索引上值的表就能取出50呢?
翻了一下《Programming in Lua, 3rd Edition》,里面确实也是有这个用法,但是没有讲太详细,求解答。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不知道这样讲能行吗,好多没用lua了,忘差不多了。