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点:
- alias是Ruby的一个关键字,而alias_method是Module类的一个方法
- alias的参数就是方法本身(method identify),注意,不是字符串,也不是Symbol,alias_method的参数则是字符串或者symbol,并且使用逗号分隔。
- 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