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
,为了简洁起见,我只想说我不想在这里使用
答案 0 :(得分:4)
我不认为Ruby在缺少对象引用时会将old_name = whatever
识别为方法调用。尝试:
def name=(whatever)
puts whatever
self.old_name = whatever
end
代替(注意self.
)
答案 1 :(得分:1)
您需要self.old_name = whatever
,只需old_name
是本地的。
答案 2 :(得分:1)
试试这个:
alias old_name= name=
答案 3 :(得分:-1)
别名是否是一个setter?
class User < Person
alias :old_name :name=
def name=(whatever)
old_name whatever
end
end