什么是闭包?
‘闭包’(Closure)是一类函数的名称,这些函数能够在创建块的作用域(将其视为块的“原作用域”,native scope)内存储(即“封闭”,enclose)局部变量的值。Ruby 的块是闭包。要理解这一点,请看这个示例:
x = "hello world"
ablock = Proc.new { puts( x ) }
def aMethod( aBlockArg )
x = "goodbye"
aBlockArg.call
end
puts( x )
ablock.call
aMethod( ablock )
ablock.call
puts( x )
这里,在 ablock
作用域的内局部变量 x
的值是 “hello world”。但是,在 aMethod
方法中,名为 x
的局部变量具有值,’goodbye’。尽管如此,当 ablock
被传递给 aMethod
并在 aMethod
的作用域内调用时,它打印出 “hello world”(即,在块的 ‘native scope’ 中 x
的值,而不是在 aMethod
的作用域内 x
的值 ‘goodbye’)。
有关闭包(closures)的更多信息,请参阅本章末尾的“深入探索”。