Ruby中的别名设置器方法
问题描述:
Ruby中的别名方法相对简单。一个人为的例子:Ruby中的别名设置器方法
class Person
def name
puts "Roger"
end
end
class User < Person
alias :old_name :name
def name
old_name
puts "Staubach"
end
end
在这种情况下,运行User.new.name
将输出:
Roger
Staubach
按预期工作。不过,我想别名setter方法,这显然是不直截了当:
class Person
def name=(whatever)
puts whatever
end
end
class User < Person
alias :old_name= :name=
def name=(whatever)
puts whatever
old_name = whatever
end
end
有了这个,呼吁User.new.name = "Roger"
将输出:
Roger
看来,新的别名方法获取叫,但原来不是。
这是怎么回事?
PS - 我知道super
,让我们只说为简便起见,我不想在这里使用它
答
我不认为将Ruby认识old_name = whatever
作为一个方法调用时,它缺乏一个对象参考。尝试:
def name=(whatever)
puts whatever
self.old_name = whatever
end
代替(注意self.
)
答
你需要self.old_name = whatever
,只是普通old_name
是本地的。
答
别名是否有作为setter?
class User < Person
alias :old_name :name=
def name=(whatever)
old_name whatever
end
end
答
试试这个:
alias old_name= name=
谢谢,这工作。我也意识到,几乎没有理由,别名版本必须是一个setter,我可以直接传递参数给它,它会工作。 – jerodsanto 2011-02-25 22:46:11
查看http://stackoverflow.com/questions/44715/why-do-ruby-setters-need-self-qualification-within-the-class – 2011-02-25 22:49:15