使用 lib classic。我有以下代码:
Combination = Object:extend()
function Combination:new(level, score)
self.curentCombinationValues = 0
self.curentCombination = {}
self.level = level
self.score = score
end
NonPair = Combination:extend()
function NonPair:new()
NonPair.super:new(1, 2)
end
OnePair = Combination:extend()
function OnePair:new()
OnePair.super:new(1, 3)
end
当我创建两个对象时,第二个对象会替换继承对象的变量,这意味着第一个对象也会发生变化。
local one = NonPair()
local second = OnePair()
one.level = second.level 。为什么?
NonPair.super:new(1, 2)
是的语法糖NonPair.super.new(NonPair.super, 1, 2)
(同样的模式也适用于OnePair
)。这意味着上下文
self
内部Combination:new
不会引用新实例(one
),而是引用父类本身(Combination
)。这样,self.level = level
就相当于Combination.level = level
在类本身上设置一个键值对。的调用将
OnePair.super:new(1, 3)
覆盖由 设置的值NonPair.super:new(1, 2)
,因此one.level
和都second.level
产生相同的值(都调用__index
元方法在父类中查找值)。与该库一起使用的正确模式是
如README 中所示。