Blitz Lua 函数接口 |
|
“函数接口”直接将 BlitzMAX 函数映射到 Lua 对应函数。给定 BlitzMAX 模块的所有函数都驻留在一个 Lua 表中,其名称与底层模块相同:例如,在 Lua 中,BlitzMAX 函数 createWindow 位于模块 BRL.MaxGUI 中,由 brl.maxgui.createWindow 复制(其中 brl 是一个全局表)。可选的“import”机制使给定模块的所有函数都成为全局函数,从而无需使用模块名称作为前缀。
MaxGuiExample 包含两个简单的示例,说明了此接口的使用。
命名约定
由于 Lua 是一种区分大小写的语言(而 BlitzMAX 不是),因此以下命名约定适用
如果有任何不确定性,请参考包中的函数引用。
参数处理和类型转换
Lua 函数参数等于相应 BlitzMAX 函数的参数,任何默认值都会被正确地保留(即,相应的 Lua 参数可以是 nil)。类型转换如下
此外,
值得注意的细节:由于 BlitzMAX 有自己的“垃圾收集”,因此任何 BlitzMAX 对象都必须在创建后不久被显式引用(从 BlitzMAX 本身内部!),以防止被删除。这是在内部使用 BlitzMAX “句柄”(它是给定对象的逐一代表)完成的 - 事实上,传递给 Lua 的是对象的句柄,而不是对象本身。因此,现在由 Lua 来“销毁”不再需要的任何 BlitzMAX 对象。因此,每个 BlitzMAX “createXXX”函数(或“loadXXX”或类似函数)用于创建类型为 XXX 的对象,现在也具有“destroyXXX”对应函数(在同一个模块中),必须调用该函数来删除该对象。
任何 BlitzMAX 常量也可以在属于定义模块的表中使用 - 它们的名称已保留为大写(例如 brl.event.EVENT_WINDOWCLOSE),与 BlitzMAX 中一样。