Ruby元编程与闭包深入解析
1. self与词法作用域的基本规则
在Ruby中,有一些通用规则可以帮助我们跟踪 self
和词法作用域:
- 在类或模块作用域内, self
总是被设置为该类或模块。当使用 class
或 module
关键字时,Ruby会创建一个新的词法作用域,并将该作用域的类设置为新的类或模块。
- 在方法(包括类方法)内部,Ruby会将 self
设置为该方法调用的接收者。
2. 元编程与闭包:eval、instance_eval和binding
在Ruby中,元编程和闭包密切相关。许多元编程构造也充当闭包,使其中的代码能够访问引用环境。下面我们将介绍三个重要的元编程特性。
2.1 eval方法
eval
方法是最纯粹形式的元编程。你将一个字符串传递给 eval
,Ruby会立即解析、编译并执行该代码。例如:
str = "puts"
str += " 2"
str += " +"
str += " 2"
eval(str)
这里我们动态构建了字符串 puts 2+2
并传递给 eval
,Ruby会对其进行求值。需要注意的是, eval
在调用它的相同上下文中计算新的代码字符串。