Proc 是一个由区块及其运行环境(堆栈帧和局部变量作用域)的对象化封装。除了无法导入局部变量作用域,Proc 可以像一个没有名字的方法一样使用。
从下面 Proc 可以引用局部变量 var,我们可以看出 Proc 是保留局部变量作用域的:
(换句话说,Proc 所用到参数的取值永远是被调用的那一刻,对应参数的取值,而非某一特定节点的取值)
var = 1 $foo = Proc.new { var } var = 2 def foo $foo.call end p foo # => 2
将区块及其上下文对象化,并返回该对象。
如果没有区块被指定,当前的方法中附带了一个区块,这个区块会生成一个 Proc 对象并返回。
执行程序的内容并返回其运算结果,参数会原封不动地传递给区块(根据并行赋值的规则)。