Рассмотрим следующий код:Назначение не псевдонимами правильно
class Cattr
attr_accessor :attr
alias_method :a_attr, :attr
alias_method :a_attr=, :attr=
def attr ; a_attr ; end
def attr= value ; a_attr= value ; end
end
ca = Cattr.new
#⇒ #<Cattr:0x000000018974b0>
ca.attr
#⇒ nil
ca.attr = 42
#⇒ 42
ca.attr
#⇒ nil
Что? Проблема не с помощью метода наложения спектров, определяемого attr_accessor
, альясинг поглотителя работает довольно отлично:
class Cattr
attr_accessor :attr
# alias_method :a_attr=, :attr=
alias_method :a_attr, :attr # still aliased
# def attr= value ; a_attr= value ; end
def attr ; a_attr ; end # still aliased
end
ca = Cattr.new
#⇒ #<Cattr:0x000000018974b0>
ca.attr
#⇒ nil
ca.attr = 42
#⇒ 42
ca.attr
#⇒ 42 # sic!
Sidenote наложения attr?
метода работает довольно тоже хорошо.
Мой вопрос будет: это известное рубиновое поведение (aliasing seters запрещено), или я пропускаю что-то очевидное?
@ jörg-ш-Миттаг- Ну, отлично в настоящее время. Как этот вопрос является дубликом связанного? Пожалуйста, укажите на него ответ, который применим в качестве ответа на этот вопрос. – mudasobwa