Lua 对象不仅仅是表?

dol*_*hin 1 oop lua

我对 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)

这怎么可能不仅仅是一张桌子?这是什么?我如何在这个“对象”中打印所有可用的属性和方法名称?

Pig*_*let 5

来自 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