Tag: 伪全局

在方法定义中使用$ 1,$ 2等全局变量

给出以下两段代码: def hello(z) “hello”.gsub(/(o)/, &z) end z = proc {|m| p $1} hello(z) # prints: nil def hello z = proc {|m| p $1} “hello”.gsub(/(o)/, &z) end hello # prints: “o” 为什么这两段代码的输出不同? 有没有办法从方法定义外部将块传递给gsub ,以便以与在方法定义中给出块的方式相同的方式计算变量$1 , $2 ?