2010-05-29 17 views
8

Yazar Programming Scala'un 3. Bölümünde, döngülere/kavrayışlara iki örnek verir, ancak using() ve {} 'ler arasında geçiş yapar. Neden böyle oluyor, çünkü bunlar doğal olarak aynı şeyi yapıyorlar? Örnek 2'de 2.'un 2. satırda bir sebebi var mı?Scala'nın Döngüler İçin Kapsamını Anlama (Anlama İçin)

// #1()'s 
for (breed <- dogBreeds 
    if breed.contains("Terrier"); 
    if !breed.startsWith("Yorkshire") 
) println(breed) 

// #2 {}'s 
for { 
    breed <- dogBreeds 
    upcasedBreed = breed.toUpperCase() 
} println(upcasedBreed) 

cevap

8

yeşil İpucu okursanız: ifadeleri

parantez veya küme parantezleri ile tanımlanan, ancak küme parantezi kullanarak noktalı virgül ile filtreleri ayrı gerekmez demektir edilebilir . Birden fazla biri vs. filtre, atama, () and {} ile anlama Yani

varken Çoğu zaman , değişikliğin kullanılan ayırıcı olduğunu aynı tek şey küme parantezi kullanmayı tercih edeceğiz : () için semicolon ";" ayırıcı olarak kullanmak ve {} için new line kullanın.

+12

Scala'nın WTF özelliklerinden bir diğeri. Harika bir dil, ama sadece gereksiz değil, ama muhtemelen zararlı olan şekerle dolu. – andyczerwonka

+1

Noktalı virgül çıkarımı ücretsiz gelmiyor. Isırdığı diğer zaman 'val a = 1 + 2 + 3 + 4'. Bu, val val = 1, + (2). + (3); 4.unary _ +() ' – retronym

+0

İlk örnekte derleme olmadığını unutmayın. – retronym