在Lua中理解OOP

用户名

我使用Python进行大部分编程,并且大多数项目都使用OOP做法。我最近开始研究Love2D游戏库和引擎。我设法配置了一些东西,然后考虑制作GameObject类。但是,这是什么?Lua没有课程!它具有表,元表和其他类似的东西。即使多次阅读文档,我在制作标题时还是遇到很多麻烦。

考虑以下示例:

catClass = {}
catClass.__index = catClass
catClass.type = "Cat"

function catClass.create(name)
    local obj = setmetatable({}, catClass)
    obj.name = name
    return obj
end

cat1 = catClass.create("Fluffy")
print(cat1.type)

cat2 = catClass.create("Meowth")

cat1.type = "Dog"

print(cat1.type)
print(cat2.type)
print(catClass.type)

输出如下:

Cat
Dog
Cat
Cat

我不明白的是为什么将cat1.type更改为“ Dog”不会在cat2和catClass中引起相同的更改。设置元表是否会创建表的副本?Google没有提供有用的结果(很少有关于Lua的好的解释)。

佩奇·德波尔

当您为表建立索引并且键不存在时,Lua会查看该表是否存在一个元表。如果这样做的话,它将使用该元方法的__index密钥来重新索引您的密钥。

在创建时,cat1它继承了catClass元表。然后,当您建立索引时type,它将看到cat1没有被调用的表条目type,因此将在元表中查找它。

然后,设置typecat1Dog,这只是设置的表密钥cat1本身,不是元表。这就是为什么当你指数cat1再次为typeDog而不是Cat

如果您访问http://www.lua.org/,则有Lua的作者编写的文档和《 Lua编程》的一些较旧版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章