无需原生代码扩展 Corona 库

无需原生代码扩展 Corona 库

这是 Corona 长期用户 Matthew Webster 的客座文章。

虽然 Corona 简单、强大且拥有许多有用的 API,但总会有额外的一件事。通常,这一件事似乎足够简单,可以整合到现有的 Lua API 中,但可能看起来被遗忘了。

本教程将向您展示如何:

  • 向现有库添加新功能
  • 扩展现有功能

Corona 库 API

Corona 中的所有功能都由库 API 提供。其文档在此处

如果我们看一下 'string.*' API,我们可以看到一系列函数,例如:

  • string.find()
  • string.format()
  • string.gsub()
  • string.len()
  • string.lower()

碰巧的是,所有这些函数都不是用 Lua 编写的,它们是 C++(跨平台)、Objective-C(用于 iOS)或 Java(用于 Android)中提供的较低级别函数的句柄。'math.*' API 等库也是如此。

但是,一些 API 完全用 Lua 提供,例如 Corona 的 'widget.*' API 完全用 Lua 编写。Corona Labs 甚至提供了原始源代码!

无论 Corona Labs 工程师选择使用哪种代码实现方式,事实仍然是,在我们的 Lua 世界中,每个函数都紧紧地受限于 Lua 的规则。事实上,每个库(包括 'string.*' API)实际上都是一个表。没错:'string' 是一个表,上面定义的所有函数都是该表的成员。

这使我们能够轻松地做一些非常聪明的事情。

一个有用的函数

我们要学习的第一件事是如何将我们自己的函数添加到 Corona SDK 自己的 API 库中。我们为什么要这样做呢?好吧,假设你编写了一个非常有用的函数,它可以删除字符串开头和结尾的空格。在大多数语言中,这通常称为 'trim()'

不用担心函数内部实际发生了什么。只需知道你已经编写了它,它很棒,并且当你想让一个字符串开头和结尾有非常烦人的空格时,它工作得非常好。

print( trim( " Hello World! " ) )

输出

Hello World!

许多 Corona 开发人员的通常做法是将此 'trim()' 函数放入一个库文件中,例如
utils.lua”。我们要做的是让它更容易记住并且在类别上更准确……这个函数是
一个字符串函数,因此应该像其他字符串函数一样访问它。

添加到 Corona 的 API

要明确的是,我们的函数位于名为 "utils.lua" 的文件中,因此我们希望在该文件中完成所有工作。当然,"utils.lua" 将通过标准的 'require' 调用加载到我们的 "main.lua" 的内存中

require("utils")

"utils.lua" 中的函数如下所示

因此,让我们将此函数添加到 'string.*' API。在 "utils.lua" 中,在我们定义函数之后,我们使用一个标准的表值赋值(这是神奇的部分)

string.trim = trim

就是这样。很简单。

你现在可以在代码中的任何位置调用 'string.trim(" Hello World! ")',它将打印

Hello World!

库的优点

假设我们定义了一个字符串

local str = " Hello World! "

在字符串 API 中拥有 'trim()' 函数的优点在于,我们现在可以将该函数作为任何字符串变量的成员来调用

print( str:trim() )

将输出

Hello World!

这是因为 'string' 库通常表示字符串变量。

重要的是要注意,这不会将你的 trim 函数添加到每个人的 Corona string.* 库中,也不会使其可用于你的下一个项目。你需要继续 require 你的 util.lua 文件。但这里的想法是

string.trim()

util.trim()

在语义上更有意义。 希望这个简单的小技巧可以使你使用 Corona 进行开发时更加轻松。

Rob Miracle
[email protected]

Rob 是 Corona Labs 的开发者关系经理。除了热衷于帮助其他开发者使用 Corona 制作出色的游戏之外,他还喜欢在业余时间制作游戏。自 1979 年以来,Rob 一直在从个人计算机到大型机上编写游戏代码。他在游戏行业拥有超过 16 年的专业经验。

无评论

抱歉,评论表单目前已关闭。