据我从文档中了解到,我们在 Lua 中没有类。 Lua没有类的概念;每个对象都定义自己的行为并具有自己的形状。
因此,遵循基于原型(prototype)的语言(例如 Self 和 NewtonScript)的指导,在 Lua 中对类进行简单模拟会是这样的。
function Account:new (o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
我不明白的是 o = o
做了什么以及为什么我们需要使用 setmetadatatable 和下一行 index = self
。
它有什么作用以及为什么我们需要它们?
另外self.o = o
也很好理解,但是o = o
,这不会产生任何冲突吗?
最佳答案
A = B 或 C
是常用的习惯用法,依赖于逻辑运算符的短路计算。如果第一个操作数 B 不为 null 或 false,则 A 获取 B 的值,并且不计算另一个操作数。如果 B 为 null 或 false,则 A 获取 C 的值。
在这个习惯用法的特定应用中,当未给出参数 o
时,o
会获取新空表的默认值,因为缺少的参数计算结果为 null 值。
参数 o
是一个局部变量,因此为其分配任何内容的所有效果都将保留在 Account:new()
函数的本地。
关于class - 'o = o or {}'在Lua中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72335138/