Lua对象不仅仅是表?

我非常新手Lua,并试图使用[Aseprite API](https://github.com/aseprite/api)编写短脚本。

API使用[Image](https://github.com/aseprite/api/blob/master/api/image.md#image)对象表示图像。

我对Lua中的OOP的理解是,一切都只是一个表格。没有类或对象,只有返回表格的函数。

所以我认为,我应该能够使用pairs(table)迭代地查看[Image](https://github.com/aseprite/api/blob/master/api/image.md#image)对象的所有属性。

-`image`是图像对象
for attribute,value in pairs(image)do
   app.alert(k..“:”..v)-在Aseprite应用程序中创建警报窗口
end

我希望这会显示可供使用的每个属性和方法名称。但是,我只会得到一个错误:

lua:2:在“for iterator”中的坏参数#1(表格期望得到ImageObj)

这不仅仅是一个表格,这有可能吗?这是什么?我该如何打印出对我可用的所有属性和方法名称的对象?

点赞
用户2858170
用户2858170

在 Lua 参考手册中,比如第 1-2 页上所述:

Lua 有八种基本类型:nil、boolean、number、string、function、userdata、thread 和 table。

提供了类型 userdata,以允许将任意的 C 数据存储在 Lua 变量中。userdata 值表示一个原始内存块。有两种 userdata:full userdata,它是一个由 Lua 管理的带有内存块的对象;light userdata,它只是一个 C 指针值。在 Lua 中,userdata 没有预定义的操作,除了赋值和身份测试。通过使用元表,程序员可以为 full userdata 值定义操作(见 §2.4)。不能在 Lua 中创建或修改 userdata 值,只能通过 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

2021-03-18 18:51:35