2012-09-22 13 views
39

Google aramayı denedim ve iyi bir forall örneği bulamadınız. Bu ne işe yarıyor? Neden bir boole işlevi alır?Scala forall örneği?

Lütfen beni referansa yönlendirin (Scaladoc hariç).

+6

http://www.scala-lang.org/api/current/scala/collection/immutable/List.html: 'Bu listenin tüm öğeleri için bir yüklemenin bekleyip tutmadığını sınar. ' – MikkoP

+1

belki de kafan karıştı çünkü düşündün çünkü bunun yerine foreach işlevinin işlevselliği (tüm öğelerle yineleyin) –

+1

Evet Onun foreach'ın paralel bir versiyonunu düşünüyordum. – Jus12

cevap

64

forall yöntem bir Boole döndüren bir işlev p sürer. forall'un semantiği, true'un toplanmasını, x koleksiyonundaki her p(x) doğruysa.

Böylece:

List(1,2,3).forall(x => x < 3) 

şu anlama gelir: 1, 2 ve 3, aksi az 3, false olan true ise. 3 en az bir varsa true döndüren bir benzer bir yöntem exists bulunmaktadır az 3.

daha: tüm elemanlar 3'ten daha az olan, söz konusu değildir çünkü bu durumda, false değerlendirecek x öğesinde, p(x) öğesinin doğru olması için koleksiyonda.

Böylece:

List(1,2,3).exists(x => x < 3) 

şu anlama gelir: 1, 2 ve 3'ten en az biri en az 3, false aksi takdirde trueise. Bu durumda, true 'a göre değerlendirilecektir, çünkü bazı elemanlar 3'ten küçüktür: örn. 1 Bir Scala komut dosyası kullanarak bu işlevle oynasa az 3.

+2

böylece 'forall (foo)', 'foldLeft (true) ((x, y) => x & foo (y))' – Jus12

+5

@ Jus12 'ye eşdeğerdir, evet, '&&' kullandığı düzeltmeyle kısa devre değerlendirmesi (“false” bulursa foo değerini değerlendirmeyi durdurur). – dhg

3

hızlı bir örnektir.

println(args.forall(p => (p.equals("a")))) 

ile myScript.scala dosyası oluşturabilir ve kapatılması içinde daha komutlar kapsam değişkenleri dışına atama eg yürütebileceği unutmamak

scala myScript.scala a a a // true 
scala myScript.scala a b c // false 
+4

neden REPL'yi kullanmıyorsunuz? –

0
Ayrıca

iyi ile diyoruz

def main(args: Array[String]){ 
var country = "" 
var environment = "" 

val isValid = args.sliding(2, 2).forall{ 
    case Array("--env", value : String) => { 
    environment = value 
    Array("test", "staging", "prod").contains(value.toLowerCase()) 
    } 
    case Array("--country", value : String) => { 
    country = value 
    Array("BE", "NL", "FR").contains(value.toLowerCase()) 
    } 
    case _ => false 
} 

if(!isValid){ 
    println ("Wrong usage. Please insert params in the following format: --country {NL,BE,UK,FR} --env {test, staging, prod}") 
    return 
} 
else 
    println (s"Correct usage. env=$environment country=$country") 

}