Внутри вашего method_missing
, method_name
интерпретируется как локальная переменная, а не как метод мутатора method_missing=
, который вы ожидаете. Если вы явно добавите получателя, вы получите то, что хотите:
def method_missing(method_id)
self.method_name = method_id.to_s
self
end
Кроме того, вы можете присвоить @method_name
переменную экземпляра:
def method_missing(method_id)
@method_name = method_id.to_s
self
end
Макрос attr_accessor
просто добавляет для вас два метода, поэтому attr_accessor :p
является сокращением для этого:
def p
@p
end
def p=(v)
@p = v
end
Вы можете использовать базовую переменную экземпляра, когда хотите или нуждаетесь.