BasicObject是ruby中所有类的父类。

一、BasicObject提供的实例方法

BasicObject提供的方法较少,我在文章中只记录一些要点。

1. == 与eql?同为BasicObject提供的实例方法,但用法上稍有不同。

1==1.0#=>true1.eql?1.0#=>false

2. send方法,下面为send方法的例子。

classKlassdefhello(*args)"Hello"+args.join('')endendk=Klass.newk.send:hello,"gentle","readers"#=>"Hellogentlereaders"

send为ruby中的实例提供了动态调用方法的可能,实在是元编程的利器。

3. instance_eval && instance_exc

这两个方法的作用都是将对象的作用域撕开,将方法后所跟的块的self变成对象的上下文环境。所不同的是instance_exc可以向块内传递参数。

二、 BasicObject提供的私有方法

1. method_missing方法

method_missing方法被用来处理对象调用方法不存在时的情况,如果在对象类中覆写method_missing,那么可以达到意想不到的效果。使用起来较难。

2.singleton_method_added方法

当一个单例方法添加到一个接受者之后,singleton_methdo_added方法会被当作反馈被调用。

moduleChattydefChatty.singleton_method_added(id)puts"Adding#{id.id2name}"enddefself.one()enddeftwo()enddefChatty.three()endend###Addingsingleton_method_added##AddingoneAddingthree

下面还有singleton_method_removed 和singleton_method_undefined 方法,和本方法用法相同。我们可以通过示例代码体会一下class << self .... end 的用法。

moduleChattydefChatty.singleton_method_removed(id)puts"Removing#{id.id2name}"enddefself.one()enddeftwo()enddefChatty.three()endclass<<selfremove_method:threeremove_method:oneendend