2012-11-09 2 views

risposta

7

ne dite di questo:

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

Funziona solo se 'costosi (bar)' tipo rispetto per-la comprensione interfaccia (mappa, flatMap, filtro, con filtro ecc.). L'autore della domanda non ha suggerito di farlo. E se lo fa, restituirà un risultato diverso rispetto al codice fornito dall'autore. – pedrofurla

+1

@pedrofurla OK. costoso() potrebbe non restituire la raccolta. Quindi cambia "<-" a "=" – Don

+0

Hm ... non sapevo che potevi omettere il 'val' lì. Bello. Ancora, '<-' e' = 'hanno significati completamente diversi, anche se restituisce una collezione. A proposito, la raccolta non è necessaria, solo l'interfaccia 'discutibilmente monadica'. – pedrofurla

4

Sì, è possibile:

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)