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 中一样。