我已经在某处读过Ruby中的块有嵌套范围,这是什么意思?我已经阅读了有关嵌套作用域的内容,有些声明这些是创建新作用域的作用域。我不确定Ruby是否属实,因为块在do/end
之间,如果你在那里定义一些变量,例如,它没有创建新的范围。有人可以帮我解释一下吗?
答案 0 :(得分:1)
Ruby的块是词法范围的,因此关闭它们的外部范围。
例如:
foo = 'foo'
->{
# new scope can see outer foo
puts foo # => 'foo'
# new scope can manipulate outer foo
foo = foo + '!'
bar = 'bar'
}.call
puts foo # => 'foo!'
# outer scope cannot see variables created in block scope
defined?(bar).nil? # => true