Lua 是一门嵌入式语言,和 host 的联动非常重要。Lua 使用 userdata 来保存 host 里的数据,userdata 非常强大,可以有 metatable 还可以关联一个 uservalue ,可以封装一切 C/C++ 对象,非常强大。但有的时候却稍显不足,似乎缺了点什么,导致一些简单的需求要用很繁琐的方式解决。有个想法想过很久,今天动了念头用英文写了一遍投递到 lua 邮件列表里去了。那就是,如果我们可以给 userdata 的值关联一个整数,而不是把 uservalue 关联到 userdata 的对象里那样,可以简化很多事情。看这样一个例子:如果我们有一个数据结构:struct foo {
struct foo1 foo1;
struct foo2 *foo2;
};如何保存到 lua 里被 lua 引用呢?通常我们使用一个 userdata 封装它:struct foo * f = lua_newuserdata(L, sizeof(*f));但是,如果我们想进一步引用这个结构中的一个子结构怎么办?即,如果我们在 lua 里有了 userdata foo, 希望可以通过 foo.foo1 引用其子结构 foo1, 用 foo.foo2 引用 foo2 怎么办?当然,我们先要给 foo 配置一个 metatable 并实现 index 元方法。这样在语
...
继续阅读
(88)