【发布时间】:2016-03-22 10:11:04
【问题描述】:
考虑以下代码:
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 定义的别名方法,别名 getter 工作得很好:
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!
旁注:别名 attr? 方法也很好用。
我的问题是:这是一种已知的 ruby 行为(禁止使用别名设置器)还是我遗漏了一些明显的东西?
【问题讨论】:
-
@jörg-w-mittag 好吧,现在很好。这个问题如何与链接的问题重复?请指出那里的答案,它适用于这个问题的答案。
标签: ruby metaprogramming alias attr-accessor