为什么我应该像这样使用alias_method:
alias_method :author, :name
而不是简单地执行以下操作?
def author
self.name
end
答案 0 :(得分:1)
因为它更干净,Ruby强制执行的任务之一就是惯例。
此外,如果您要更改name方法的参数数量,那么您必须在author方法上更改它,而使用method_alias
时,您不必在多个位置更改它。 / p>
然而,如果你想使用你写的方法,你肯定可以说参数的数量不会改变(我确信它不会在你的情况下),你可以做到这一点,它是没错,但你也不需要self
部分,你可以这样写:
def author
name
end
答案 1 :(得分:1)
alias_method
实际上会为您创建该方法的副本。如果您稍后重新定义了name
某些新行为,author
仍会保留原始行为。如果要保留原始行为,这非常有用。见the docs for alias_method
使new_name成为方法old_name的新副本。这可用于保留对被覆盖的方法的访问。
module Mod
alias_method :orig_exit, :exit
def exit(code=0)
puts "Exiting with code #{code}"
orig_exit(code)
end
end
include Mod
exit(99) # => Exiting with code(99)
答案 2 :(得分:1)
编写完整方法需要花费大量时间。此外,当您想要复制更深入的方法时,可以使用alias_method
。
最后,还有一个微妙之处。
class Foo
def bar1
"This is bar 1"
end
alias :bar2, :bar1
def bar1
"This is sparta!"
end
end
puts Foo.new.bar1 # => "This is sparta!"
puts Foo.new.bar2 # => "This is bar 1"
以上显示别名总是指向第一种方法。在考虑继承时这很重要。
See the Docs。他们说这是旧方法的副本。