使用元组作为参数列表调用一个方法

11

我想知道最佳的做法是什么。

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等人在这个例子中有另一个技巧来减少噪音。
因此,问题是如何应对这里的混乱,假设您不允许更改baz的实现(例如def baz(a: (String Int)))。

+1 我知道这有点重复了,但我个人认为标题更好,因此会被更多人发现 :) - fresskoma
2个回答

19

这个问题已经在这里得到了回答:scala元组拆包

首先,通过部分应用将foo转换为函数,然后使用参数列表调用tupled

(foo _).tupled(myTuple)

1
谢谢!(x zip y) flatMap (baz _).tupled 像魔术一样奏效。 - Joa Ebert

1

清晰地解包任何内容的最常见方法是使用模式或for-comprehensions:

for ((a,b) <- (x zip y); c <- baz(a,b)) yield(c)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接