在 C 中,我可以做到
int scoped_var = 2;
{
int scoped_var = 3;
}
我如何在 Ruby 中做到这一点?
如果您希望有一个块局部变量,其名称与定义该块的范围内的变量相同,而无需设置先前定义的变量,则可以使用以下语法:
foo = 1
items.each do |item;foo|
foo = item.number
end
puts foo #=> 1
您也可以在不传递块变量的情况下执行此操作:
x = Proc.new { |;foo| ... }
请注意,这只是 Ruby 1.9+。
这不是 Ruby 真正做的事情。局部变量是通过赋值创建的;除了作为参数之外,根本没有办法声明它们。(在 1.9 中,这包括块参数。)
我想 Rubyish 做类似事情的方法就是通过赋值保存并恢复到另一个本地。