ruby深入研究4

block的环境理解:

def my_method
  x = "aaa"
  yield("lala")
end

x = "ooo"
my_method {|y| "#{x}, #{y} fdg" }

 上面的代码得到的结果是 ooo,lala fdg

原因是运行block时候是带着当前环境的上下文的,也就是说当前环境的临时变量,类变量,全局变量,常量,都是跟着block走的,而调用block的地方的环境上下文是对block来说不可见的,也就是说只有定义block的时候的上下文对block来说才有意义。所以这个东西很多人称他为-----闭包。因为调用她的时候,外部是无法对他产生影响的。

你可能感兴趣的:(Ruby)