元编程是编写在运行时操纵语言构建的代码。
一 对象模型
1 对象的实例变量存放在对象中,而对象的方法存在于对象自身的类。
2 类自身也是对象。
3 任何大写字母开头的引用(包括类名和模块名)都是常量。
4 当调用一个方法时,ruby会做两件事:
1)找到这个方法,这个过程称为方法查找;
2)执行这个方法,为了做到这一点,ruby需要一个叫做self的东西。
二 方法
1 动态方法,动态派发
2 动态代理,白板
第三章 代码块
1 可以把一个块放在大括号中,也可以放在do..end关键字中。
只有在调用一个方法时才能定义一个块。块会被直接传递给这个方法,然后该方法可以用yield关键字回调这个块。
2 作用域门:class,model,def关键字
3 穿越作用域门:
1)扁平化作用域:
- Class.new()代替class;
- Model#define_method代替def
2)共享作用域
在一个扁平作用域中定义了多个方法,这几个方法用一个作用域门保护,并共享绑定。
4 instance_eval()上下文探针
5 Proc对象
一个Proc就是一个转换成对象的块。
可以用Proc#call()方法来执行由块转化来的对象,称为延迟执行。
把块转化为Proc对象的方法:
- Proc.new
- lambda()
- proc()
- &操作符
第四章 类定义