你什么时候使用方法别名?

时间:2009-08-28 17:38:59

标签: ruby

您是否使用别名方法来添加更多调用方法的方法(如长度和大小),还是有其他用途?

2 个答案:

答案 0 :(得分:3)

alias_method调用对于重新实现某些内容非常有用,但保留了原始版本。还有来自Rails的alias_method_chain让这种事情变得更加容易。

alias_method也会派上用场,当你有许多行为最初相同但未来可能会分歧时,你至少可以粗略地开始这些行为。

def handle_default_situation
  nil
end

%w[ poll push foo ].each do |type|
  alias_method :"handle_#{type}_situation", :handle_default_situation
end

答案 1 :(得分:3)

它通常用于在覆盖现有方法之前保留现有方法的句柄。 (人为的例子)

鉴于这样的课程:

class Foo
  def do_something
    puts "something"
  end
end

您可以看到添加新行为的代码:

class Foo
  def do_something_with_logging
    puts "started doing something"
    do_something_without_logging # call original implementation
    puts "stopped doing something"
  end

  alias_method :do_something_without_logging, :do_something
  alias_method :do_something, :do_something_with_logging
end

(这正是alias_method_chain的工作方式)

但是,对于这个用例,use inheritance and modules to your advantage通常更合适。

如果你绝对需要重新定义现有类中的行为(或者如果你想实现像alias_method_chain这样的东西),那么alias_method是一个很有用的工具。