alias别名与alias_method_chain

浏览:2464 发布日期:2016-05-17 07:17:27

alias别名与alias_method_chain

Ruby关键字,alias :newmethod :oldmethod,给一个方法定义一个环绕别名。例如:

class Cc
    def show1
        puts "我是原始show1"
    end

    alias :without_show1 :show1

    def show1
        without_show1
        puts "别名环绕"
    end
end

通过without_show1仍可访问原始方法,重新定义show1,通过访问show1,将会访问重新定义的方法。

无非是给:show1指定一个新的别名而已。

注意: 重新定义的方法必须在alias关键字之后,否则因为重新定义的方法内包含对旧方法的访问,将会造成递归调用。

alias_method是Module类私有实例方法,它接收两个参数,可以是符号或字符串,以逗号分隔

alias_method_chain, 按官方文档,它封装类似下列这样的模式:

alias_method :foo_without_feature, :foo
alias_method :foo, :foo_with_feature

通过alias_method_chain :foo, :feature,你可以得到3个方法,分别是 foo_whitout_feature, foo_with_feature, foo,后面两个方法是你重写的方法。和alias方法不同的是,你不需要直接重写foo方法,只需重写:foo_with_feature即可,而且foo_with_feature方法,可以在alias_method_chain语句之前。

老实说,感觉这个方法有点没事儿找事,多次一举,实在不明白我为什么要单独定义一个附带with中缀的方法。