alias , alias_method ,alias_method_chain

1.alias 就是 把方法 复制一份 并且取一个新的别名

    例如

 

class Rocky
  def name
    puts "old_name"
  end
end

test = Rocky.new

class << test
  alias rocky_name , name
  def name
    rocky_name
    puts "is turn into new name"
  end
end

 

2. alias 与 alias_method的区别

来自pragmati.st, 区别有3点:

  1. alias是Ruby的一个关键字,而alias_method是Module类的一个方法
  2. alias的参数就是方法本身(method identify),注意,不是字符串,也不是Symbol,alias_method的参数则是字符串或者symbol,并且使用逗号分隔。
  3. alias_method可以重定义,而alias则不能


alias new_method_name old_method_name
alias_method
:new_method_name, :old_method_name
alias_method 'new_method_name', 'old_method_name'

 

 

class A
  def rocky
    puts "rocky"
  end
end

class A
  def rocky_add
    puts "rocky_Add"
    rocky_old
  end

  alias_method :rocky_old , :rocky
  alias_method :rocky , :rocky_add
end

a = A.new
a.rocky

 

 #alias_method :rocky_old , :rocky  将原方法取了一个别名 rocky_old

 #alias_method :rocky , :rocky_add  将新的方法覆盖原方法 aop 思想

 

 

3. ActiveSupport 中的 alias_method_chain

 

  alias_method_chain :write, :number  为原来的方法命名为 write_without_number  新方法为  write_with_number 用 write_with_number  替代 write 方法

 

 例如

class << shili

 

   alias_method_chain :write , :number

 

   def write_with_number

        write_line_without_number( )

        #new method here

   end

 

end

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值