2012-11-09 13 views

Trả lời

7

Làm thế nào về điều này:

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

này chỉ hoạt động nếu 'đắt (bar)' kiểu tôn trọng-hiểu giao diện của (bản đồ, flatMap, bộ lọc, withFilter vv). Tác giả của câu hỏi đã không đề nghị nó. Và nếu có, nó sẽ trả về một kết quả khác với mã được cung cấp bởi tác giả. – pedrofurla

+1

@pedrofurla OK. đắt tiền() có thể không trả lại bộ sưu tập. Vì vậy, thay đổi "<-" thành "=" – Don

+0

Hm ... không biết bạn có thể bỏ qua 'val' ở đó. Tốt đẹp. Tuy nhiên, '<-' và' = 'có ý nghĩa hoàn toàn khác, ngay cả khi nó trả về một tập hợp. BTW, bộ sưu tập là không cần thiết, chỉ có giao diện 'cho là monadic'. – pedrofurla

4

Vâng, bạn có thể:

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) 
Các vấn đề liên quan