别名方法和别名符号有什么区别?

时间:2014-09-17 13:54:32

标签: ruby

我读了一些像这样的别名方法:

alias :original_method :method

对我来说,这看起来像红宝石中的符号。如果我输入这样的别名有什么区别:

alias original_method method

结果会有所不同吗?

2 个答案:

答案 0 :(得分:7)

documentation

相比,似乎没有什么区别
  

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的值。代码。