Ruby 元编程索引
大概会持续更新吧。。。。
- 打开类 Open Class
- 猴子补丁 Monkeypatch
- 接受者(receiver)和祖先链(ancestors chain)eg: 查看String 类的祖先连 String.ancestors
- 一些重要的钩子方法
- included
- extended
- prepended
- inherited
- method_missing (幽灵方法): 当接受的反方法不存在时会调用这个方法,配合
*arg
可以接受任意个数的参数def method_missing(method, *args) "The method #{method} with you call not exists" end
- send 方法 (动态派发)
- send (Obj.send(:define_method, ‘desc’))
- public_send
- 动态方法 define_method
- instance_eval 方法仅仅会修改 self,而 class_eval 方法会同时修改 self 和当前类
- const_missing
- define_const
-
白板类 BasicObject
-
eval, instance_eval, module_eval, class_eval
- attr_accessor
- attr_reader (getter)
- attr_writer (setter)
- define_method 添加类的实例方法
A.send(:define_method, :hi, &p1)
等于Class A; define_method, :hi, &p1; end
- singleton_class 添加类所具有的方法
A.singleton_class.send(:define_method, :hi, &p1)
等于Class A; self.define_method, :hi, &p1; end