2012-11-09 5 views

Antwort

7

Wie wäre es damit:

for { 
bar <- bars 
exp = expensive(bar) 
if exp > 5 
} yield (bar, exp) 
+0

Dies funktioniert nur, wenn 'teuer (bar)' Art Respekt für Verständnis der Schnittstelle (Karte, flatMap, Filter, mit Filter usw.). Der Autor der Frage hat es nicht vorgeschlagen. Wenn dies der Fall ist, wird ein anderes Ergebnis als der vom Autor bereitgestellte Code zurückgegeben. – pedrofurla

+1

@pedrofurla OK. teurly() kann die Sammlung nicht zurückgeben. Also ändere "<-" in "=" – Don

+0

Hm ... wusste nicht, dass du das 'val' dort weglassen kannst. Nett. Dennoch haben '<-' und' = 'völlig unterschiedliche Bedeutungen, auch wenn sie eine Sammlung zurückgeben. BTW, Sammlung ist nicht notwendig, nur die "wohl monadischen" Schnittstelle. – pedrofurla

4

Ja, Sie können:

scala> List(1,2,3,4,5) 
res0: List[Int] = List(1, 2, 3, 4, 5) 

scala> for(n <- res0; val b = n % 2; if b==1) yield b 
res2: List[Int] = List(1, 1, 1) 
Verwandte Themen