gpt4 book ai didi

oop - 在 Lua 中理解 OOP

转载 作者:行者123 更新时间:2023-12-04 20:17:52 28 4
gpt4 key购买 nike

我的大部分编程都是用 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 发生相同的变化。设置元表是否会创建表的副本?谷歌没有提供有用的结果(很少有好的Lua解释)。

最佳答案

当你索引一个表并且一个键不存在时,Lua 将查看该表是否存在元表。如果有,那么它将使用 __index该元方法的键来重新索引您的键。

创建时 cat1它继承了 catClass元表。然后当你索引 type它会看到 cat1没有名为 type 的表条目从而查找元表以找到它。

然后你设置 typecat1Dog , 只设置 cat1 的表键本身,不是 元表。这就是为什么当您索引 cat1 时再次为 type你得到 Dog而不是 Cat .

如果你去http://www.lua.org/有 Lua 编程的文档和一些较旧的副本,由 Lua 本身的作者编写。

关于oop - 在 Lua 中理解 OOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21359817/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com