2015-09-24 22 views
6

Ben mesela kod çoklu hatlar hiçbir küme parantezleri ile kod bloğu olarak kullanılan scala kodunun bazı örnekler gördüm: bazılarıylaBelirtilmemesi küme parantezleri

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

aynı formun bir örtük param kullanmak çok uzun işlevleri:

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

I:

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

aksine Çok sayıda kod satırının her zaman kaşlı ayraçlarla çevrelenmesi gerektiğini belirten çok sayıda dokümantasyon/SSS gördüm, ancak bu istisnalar için bir açıklama bulamadı. Anlamak isterim ya da iyi bir sezgiye sahip olmak isterim ki bu bana sihir gibi gelmez.

+0

Başvuruda bulunduğunuz belgelere işaret edebilir misiniz? – aij

+1

İşlev hazır bilgi için yanıt: http://stackoverflow.com/a/13873899/1296806 –

cevap

2

Bir durum ifadesinde, gövde, bir bloğa benzese de aslında arg => expr formunu izleyerek bir işlev hazırlayıcısının ifade kısmıdır. Vaka ifadeleri, vaka bloğunun kapanış kıvrımının başka bir durum ifadesi ile sonlandırıldığından, işlev değişkeni'nin sınırları örtük olarak tanımlanır ve ifadenin kendi blok sınırlayıcılarına ihtiyacı yoktur.