2012-11-09 10 views

Odpowiedz

7

Jak o tym:

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

Zadziała tylko jeśli 'drogie (bar)' rodzaj szacunku dla-zrozumieniem interfejsu użytkownika (mapa, flatMap, filter, withFilter itp.). Autor pytania nie sugerował tego. A jeśli tak, zwróci inny wynik niż kod podany przez autora. – pedrofurla

+1

@pedrofurla OK. expensive() może nie zwrócić kolekcji. Więc zmień "<-" na "=" – Don

+0

Hm ... nie wiedziałeś, że możesz pominąć tamten "val". Miły. Mimo to '<-' i' = 'mają zupełnie inne znaczenie, nawet jeśli zwraca kolekcję. BTW, zbieranie nie jest konieczne, tylko interfejs "prawdopodobnie monadyczny". – pedrofurla

4

Tak, można:

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) 
Powiązane problemy