2015-09-24 116 views
6

我看到的階代碼一些樣品,其中的多行代碼被用作代碼沒有大括號的塊,例如:的省略大括號多行

x match { 
    case a:Int => 
    val b = 1 
    val c = b +3 
    println("hello!") 
    c 
    case _ => 5 
} 

相同與一些使用形式的隱性PARAM很長的功能:

a.map { implicit x => 
    // many, many complex lines of code 
} 

,而不是:

a.map { implicit x => { 
    // many, many complex lines of code 
}} 

我看過很多文檔/常見問題解答,說明多行代碼應該總是被花括號包圍,但找不到這些例外的解釋。我很想理解或者有一個很好的直覺,這樣對我來說就不會像魔術一樣。

+0

你不介意在你引用的文件指向? – aij

+1

函數文字的答案:http://stackoverflow.com/a/13873899/1296806 –

回答

2

在case語句中,body看起來像一個block,實際上是函數literal的表達式部分,其形式爲arg => expr。由於case語句被任一情況下塊的右大的另一個case語句終止,則函數文本的邊界被隱式定義和表達並不需要自己的塊定界符