我希望有人能够对我在下面收到的错误有所了解。我在Node
父类中定义一个实例变量,要访问并修改它的子类AddSubNode
,每当我尝试访问@code
我收到此错误:子类中的实例变量访问
'code': undefined method `<<' for nil:NilClass (NoMethodError)
我必须误解Ruby的继承模型,但我认为我可以做到这一点。
class Node
attr_accessor :code
def initialize
@code = []
end
end
class AddSubNode < Node
def initialize op, l, r
@op = op
@l = l
@r = r
end
def code
@code << 1 # error: `code': undefined method `<<' for nil:NilClass (NoMethodError)
@code
end
def to_s
"#{@l} #{@op} #{@right}"
end
end
有趣的是,由于某种原因,我认为这是隐式完成的。谢谢! –
不,Ruby中的方法不会隐式地调用它们的超类实现。这没有意义,也没有其他语言。我可以问*为什么*你认为? –
@JörgWMittag对于我来说这似乎是一个理想的功能,在这种特殊情况下,我有〜100个“Node”的子类,我不得不每次回去添加'super()'。你能否给出一个理由说明为什么这会发生隐含的意义? –