Ruby变量范围块

时间:2014-10-08 20:16:35

标签: ruby

在C中,您可以使用语句块将局部变量与其父作用域隔离开来。

int foo() {
    {
        int a;
    }
    // Here `a` is no longer in the scope.
}

但是在Ruby中,以下内容无法解析。

def foo
    do
        a = 1
    end
    puts a
end

有没有把变量分离到Ruby中的范围的技巧?

2 个答案:

答案 0 :(得分:3)

在大多数情况下,最合适的“内部范围”是一种单独的方法。通常,如果某个算法块中的某些数据在外部不可见,则值得将此块提取到单独的方法中。它也可以,这个块可以成为一个很好的论点。

As the docs state,这些都是具有自己的局部变量范围的所有情况:

  • proc{ ... }(因此,方法调用中的块)
  • loop{ ... }(接受块的方法,与上述相同)
  • def ... end(方法实施)
  • class ... end
  • module ... end
  • 整个程序(虽然这在问题的范围内没有用)

答案 1 :(得分:2)

以下作品,但我怀疑还有其他方法。

proc {
    a = 5
}.call