Archive for 十二月 2012

如何在不同Lua虚拟机中传递函数

有一个需求,需要在同一个进程中不同的Lua虚拟机之间传递函数对象并且调用。

考虑了很久没啥进展。原来想干脆hack Lua的指针,因为是在同一个进程中的Lua虚拟机,所以看看能不能得到函数的内存。但是这次经历让我发现其实Lua封装的非常好,在gdb中根本看到Lua State这个结构体具体的内容,也只能按照它提供的API做它允许的操作,再次让我对Lua的实现敬仰程度增加了不少。

后来去Lua maillist发问,已经有老外实现了类似的项目

Lua5.1.4代码分析(十五)-Lua继承机制分析

Lua并不是一门以OO为卖点的脚本语言,但是这并不妨碍在Lua中使用Lua的一些特性来实现类面向对象的特性。

先简单看看Lua中实现继承的简单示例代码,再展开分析。如下定义了两个模块,base.lua和test.lua,其中后者继承自前者:
base.lua

module( "base", package.seeall )
function new( )
    local obj = {}
    setmetatable( obj, { __index = base } )
    return obj
end

test.lua

module( "test", package.seeall )
setmetatable( test,