2011-06-12 55 views
9

我想知道做到這一點的最佳方法是什麼。調用使用元組作爲參數列表的方法

val foo = Some("a") 
val bar = Some(2) 

def baz(a: String, b: Int) = if((b % 2) == 0) Some(a+","+b) else None 

(x zip y) flatMap baz //does not compile of course 
(x zip y) flatMap { x => baz(x._1, x._2) } //ugly 

我會推測Odersky et al。在這個例子中,他們還有另一個技巧來減少噪音。

所以問題是如何在這裏打擊混亂,假設你不允許改變baz(例如def baz(a: (String Int)))的實現。

+0

+1我知道這是一種重複,但恕我直言標題是更好的方式,所以它會被更多人發現:) – fresskoma 2011-06-12 16:35:45

回答

17

這個問題已經在這裏找到答案:scala tuple unpacking

首先,FOO通過部分應用程序的功能,然後調用tupled與參數列表:

(foo _).tupled(myTuple) 
+1

謝謝! (x zip y)flatMap(baz _)。tupled就像一個魅力。 – 2011-06-12 15:22:13

1

最常見的方式,以乾淨解壓任何與模式或理解:

for ((a,b) <- (x zip y); c <- baz(a,b)) yield(c) 
相關問題