加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

理解Lua中的OOP

发布时间:2020-12-14 21:48:53 所属栏目:大数据 来源:网络整理
导读:我在 Python中编写了大部分编程,并且在大多数项目中使用OOP实践.我最近开始看看Love2D游戏库和引擎.我设法配置了一些东西,然后考虑制作一个GameObject类.但是,这是什么? Lua没有课程!它有表格,元表和其他类似的东西.即使在多次阅读文档后,我仍然遇到很多麻
我在 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将查看该表是否存在metatable.如果有,那么它将使用该元方法的__index键重新索引您的密钥.

当你创建cat1时,它继承了catClass metatable.然后,当您索引类型时,它将看到cat1没有名为type的表条目,因此查找metatable以查找它.

然后将cat1上的type设置为Dog,它只设置cat1本身的表键,而不是metatable.这就是为什么当你再次为cat1索引时你会得到Dog而不是Cat.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读