我希望有人能夠對我在下面收到的錯誤有所瞭解。我在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()'。你能否給出一個理由說明爲什麼這會發生隱含的意義? –