深入理解alias, alias_method和alias_method_chain

http://blackanger.blog.51cto.com/140924/355102

1. alias
   Ruby里的关键字,用于定义方法或者全局变量的别名。 例子:
  class A
     def m1
       puts "m1"
     end
     alias m2 m1
    end
=> nil
a = A.new
=> #<A:0xb7ef5234>
 a.m1
m1
=> nil
a.m2
m1
=> nil


在使用的时候,注意原有的方法名在最后位置,用空格分开。

2. alias_method
作用和alias差不多,是Module的一个私有实例方法,只能用于给方法起别名,并且参数只能是字符串或者符号(alias后面跟的直接是方法名,不是字符串也不是符号)。例子:
class B
  def b
    p "b"
  end
  alias_method :c, :b
end
=> B
b = B.new
=> #<B:0xb7ee75bc>
b.c
"b"
=> nil
b.b
"b"
=> nil

注意,alias_method的参数必须是字符串或者是符号,并且用逗号分隔。
3.alias_method_chain
ncapsulates the common pattern of:
  alias_method :foo_without_feature, :foo
  alias_method :foo, :foo_with_feature

With this, you simply do:
  alias_method_chain :foo, :feature

替我们定义了两个方法:foo_with_feature 和 foo_without_feature <保存原来的foo方法>
def foo_with_feature
  在此添加想向foo方法里面写的代码
  foo_without_feature 调用一下原来的方法
end

你可能感兴趣的:(java,C++,c,C#,Ruby)