我对 Lua 很陌生,正在尝试使用Aseprite API编写一个简短的脚本。
API 使用Image对象来表示图像。
我对 Lua 中 OOP 的理解是,一切都只是一张表。没有类或对象,只有返回表的函数。
我想,然后我将能够查看Image对象的所有属性,只需使用pairs(table).
-- `image` is and Image object
for attribute, value in pairs(image) do
app.alert(k..": "..v) -- creates an alert window in the Aseprite app
end
Run Code Online (Sandbox Code Playgroud)
我希望这能显示每个可用的属性和方法名称。相反,我只是收到一个错误:
lua:2: bad argument #1 to 'for iterator' (table expected, got ImageObj)
Run Code Online (Sandbox Code Playgroud)
这怎么可能不仅仅是一张桌子?这是什么?我如何在这个“对象”中打印所有可用的属性和方法名称?
来自 Lua 参考手册,如第 1-2 页
Lua 中有八种基本类型:nil、boolean、number、string、function、userdata、thread 和 table。
提供 userdata 类型以允许将任意 C 数据存储在 Lua 变量中。一个 userdata 值代表一块原始内存。有两种用户数据:完整用户数据,它是一个由 Lua 管理的具有一块内存的对象,和轻用户数据,它只是一个 C 指针值。Userdata 在 Lua 中没有预定义的操作,除了赋值和身份测试。通过使用元表,程序员可以为完整的用户数据值定义操作(参见第 2.4 节)。不能在 Lua 中创建或修改用户数据值,只能通过 C API。这保证了主机程序和 C 库所拥有的数据的完整性。
所以不,不仅仅是桌子。
我如何在这个“对象”中打印所有可用的属性和方法名称?
image 是一个ImageObj,但Image应该是一个提供可以在 ImageObjs 上使用的函数的表。
尝试 for k,v in pairs(Image) do print(k,v) end
或者直接参考 API 文档。
https://github.com/aseprite/api/blob/master/api/image.md#image