【问题标题】:Invoke a method using a tuple as the parameter list [duplicate]使用元组作为参数列表调用方法[重复]
【发布时间】:2011-06-12 14:20:06
【问题描述】:

我想知道最好的方法是什么。

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 我知道它有点重复,但恕我直言,标题更好,所以会被更多人找到:)

标签: scala syntax tuples


【解决方案1】:

这里已经回答了这个问题:scala tuple unpacking

首先,通过部分应用将 foo 变成一个函数,然后用你的参数列表调用tupled

(foo _).tupled(myTuple)

【讨论】:

  • 谢谢! (x zip y) flatMap (baz _).tupled 就像一个魅力。
【解决方案2】:

干净地解压任何东西的最常见方法是使用模式或理解:

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

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 2017-03-08
    • 2013-08-04
    • 1970-01-01
    • 2017-04-29
    • 2018-12-24
    • 1970-01-01
    • 2019-06-07
    • 2020-09-07
    相关资源
    最近更新 更多