我使用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
,因此将在元表中查找它。
然后,设置type
上cat1
到Dog
,这只是设置的表密钥cat1
本身,不是元表。这就是为什么当你指数cat1
再次为type
你Dog
而不是Cat
。
如果您访问http://www.lua.org/,则有Lua的作者编写的文档和《 Lua编程》的一些较旧版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句