我读了一些像这样的别名方法:
alias :original_method :method
对我来说,这看起来像红宝石中的符号。如果我输入这样的别名有什么区别:
alias original_method method
结果会有所不同吗?
答案 0 :(得分:7)
alias
关键字最常用于别名方法。什么时候 别名方法可以使用其名称或符号:alias new_name old_name alias :new_name :old_name
答案 1 :(得分:1)
除了一个方法是一个方法(因此评估它的参数与任何方法一样),你必须留下常见的用例以找到差异。
例如,如果你这样做
class Foo
def old_name
'foo'
end
def self.rename_name
alias_method :new_name, :old_name
end
end
class Bar < Foo
def new_name
'bar'
end
end
Bar.rename_name
然后Bar
覆盖了new_name方法,Foo
未被触及
但是,如果您将其更改为使用alias
即
class Foo
def old_name
'foo'
end
def self.rename_name
alias :new_name :old_name
end
end
class Bar < Foo
def new_name
'bar'
end
end
Bar.rename_name
然后Bar
类保持不变,Foo
获得一个名为:new_name的方法。这与使用define_method
与使用def
定义方法之间的差异没有什么不同。
在一种情况下,范围是纯粹的词法:调用alias
的行的位置完全决定了发生了什么,而在另一种情况下,当ruby评估那个位时,它是self
的值。代码。