Я надеюсь, что кто-то может пролить свет на ошибку, которую я получаю ниже. Я определяю переменный экземпляр в родительском классе 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() '. Не могли бы вы объяснить, почему это не имеет смысла для этого неявно? –