2014-10-08 96 views
4

在C中,可以使用語句塊將局部變量與其父作用域隔離。Ruby變量作用域塊

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

但是在Ruby中,以下解析失敗。

def foo 
    do 
     a = 1 
    end 
    puts a 
end 

是否有把把變量隔離到Ruby中的作用域的技巧?

+0

宣告內嵌塊的符號是'開始...... end',而不是'做... end'。 – tadman 2014-10-08 20:28:54

+3

在Ruby中,_scope_ gates由3個關鍵字創建:'def','class'和'module'。 – 2014-10-08 20:31:11

+0

https://www.cs.auckland.ac.nz/references/ruby/doc_bundle/Newcomers/ruby.html#blocks – 2014-10-08 20:34:37

回答

2

以下的工作,但我懷疑還有其他的方法。

proc { 
    a = 5 
}.call 
3

在大多數情況下,最合適的「內部範圍」是一個單獨的方法。通常,如果某個算法塊中的某些數據不應在外部可見,則應將該塊抽取爲單獨的方法。而且它可能是,這個塊可以作出一個很好的論點。

As the docs state,這些都是具有其自己的局部變量範圍的情況下:

  • proc{ ... }(因而,在方法調用塊)
  • loop{ ... }(接受一個塊的方法,同上文)
  • def ... end(方法實現)
  • class ... end
  • module ... end
  • 整個程序(這是沒有用的,雖然問題的範圍)