Blitz Lua 对象接口

lua-users home
wiki

本页面描述了 BlitzLua 的“对象接口”,它是一个用 BlitzMAX 编写的 Lua 运行时环境。

BlitzLua 对象接口

对象接口”直接将 BlitzMAX 类型映射到相应的 Lua “类”,即一个带有关联元表的表。给定 BlitzMAX 模块的所有类型都驻留在一个 Lua 表中,该表的名称与底层模块相同:例如,在 Lua 中,BlitzMAX 类型 TGadget(位于模块 BRL.MaxGUI 中)由 brl.maxgui.TGadget 复制(其中 brl 是一个全局表)。可选的“import”机制使给定模块的所有类型都成为全局类型,从而无需使用模块名称作为前缀。

命名约定

由于 Lua 是一种区分大小写的语言(而 BlitzMAX 不是),因此以下命名约定适用

如有任何不确定性,请参考包中的类型引用。

参数处理和类型转换

Lua 函数参数等于相应 BlitzMAX 方法的参数,任何默认值都会得到正确尊重(即,相应的 Lua 参数可以是 nil)。类型转换如下

此外,

值得注意的是:“函数接口”将 BlitzMAX 对象作为“轻量级用户数据”传递,而“对象接口”只使用 Lua “对象”。因此,接口实现了一种查找技术,以便为给定的 BlitzMax 对象检索 Lua 表,反之亦然。

因此,传递给 BlitzMAX 函数的是“_Peer”,而从 BlitzMAX 返回的每个对象都会被查找并替换为其关联的 Lua 表(如果存在这样的表,否则会“动态”创建一个新的表)。

任何 BlitzMAX 常量也可以在定义模块所属的表中使用 - 它们的名称保持大写(例如 brl.event.EVENT_WINDOWCLOSE),与 BlitzMAX 中一样。

对象接口的一些细节

接口“类”提供基于原型的差异继承(实际上这意味着,修改“类”会立即影响其所有实例,除非修改的字段被实例“遮蔽”)。此外,它们还管理其“_Peer”的生命周期:使用“守护者”(参见 BlitzLuaKeeper),每个 Lua “对象”都会在垃圾收集器将其从内存中删除时收到通知。然后它会调用其 destroy 方法,该方法会正确关闭并删除关联的 BlitzMAX 对等体。

当同时使用“函数接口”和“对象接口”时,你不应该混合使用操作 BlitzMAX 对象的函数和 Lua “方法”,除非你真的知道自己在做什么。但是,使用其他函数(不处理特定对象)是安全的(而且通常是必要的)。

与“函数接口”相比,“对象接口”允许使用面向对象的表示法,并使程序员免于自己管理 BlitzMAX 对象的负担。

“对象接口”尚未完成,但有望在 2007 年 5 月 18 日左右发布。

--AndreasRozek


最近更改 · 偏好设置
编辑 · 历史
最后编辑于 2007 年 5 月 18 日,格林威治时间上午 7:13 (差异)