博客地址 :《Ruby 元编程》读书笔记 (十三)
相关文章:
《Ruby 元编程》读书笔记 (一) 《Ruby 元编程》读书笔记 (二) 《Ruby 元编程》读书笔记 (三) 《Ruby 元编程》读书笔记 (四) 《Ruby 元编程》读书笔记 (五) 《Ruby 元编程》读书笔记 (六) 《Ruby 元编程》读书笔记 (七) 《Ruby 元编程》读书笔记 (八) 《Ruby 元编程》读书笔记 (九) 《Ruby 元编程》读书笔记 (十) 《Ruby 元编程》读书笔记 (十一) 《Ruby 元编程》读书笔记 (十二)
传神的头图↓↓↓
钩子方法有些类似事件驱动装置,可以在特定的事件发生后执行特定的回调函数,这个回调函数就是钩子方法(更形象的描述:钩子方法可以像钩子一样,勾住一个特定的事件。),在 Rails 中 before\after 函数就是最常见的钩子方法。
Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法。默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应。
class String
def self.inherited(subclass)
puts “#{self} was inherited by #{subclass}”
end
end
class MyString < String; end
#输出
String was inherited by MyString
通过使用钩子方法,可以让我们在 Ruby 的类或模块的生命周期中进行干预,可以极大的提高编程的灵活性。
这些生命周期相关的钩子方法还有下面这些:
module M2 def self.prepended(othermod) puts “M2 was prepended to #{othermod}” end end
class C include M1 include M2 end
M1 was included into C M2 was prepended to C
module M def self.method_added(method) puts “New method: M##{method}” end
def my_method; end end
New method: M#my_method
除了上面列出来的一些方法外,也可以通过重写父类的某个方法,进行一些过滤操作后,再通过调用super方法完成原函数的功能,从而实现类似钩子方法的功效,如出一辙,**环绕别名**也可以作为一种钩子方法的替代实现。
-待续-
===============
最后贴一下自己的公众账号
![](https://l.ruby-china.com/photo/2015/651b4463530c3d6d961ae41db40e5377.jpg)
可以十日不将军,不可一日不拱卒,**日拱一卒(rigongyizu365)**