用 - >传递Tuple2参数与 ,

时间:2014-01-21 03:18:04

标签: scala

Functional Programming in Scala练习中,我写出了这个功能:

  def sequenceMap[K, V](ofa: Map[K,F[V]]): F[Map[K, V]] =
    ofa.foldLeft(unit(Map[K,V]()))((x, y) => map2(x, y._2)((a, b) => 
                                                           (a + (y._1 -> b))))

map2的签名:

def map2[A,B,C](fa: F[A], fb: F[B])(f: (A,B) => C): F[C]

但是,当我用->替换最后一个,来生成元组2时,发生了以下编译时type mismatch

[error]  found   : K
[error]  required: (K, V)
[error]     ofa.foldLeft(unit(Map[K,V]()))((x, y) => 
                                     map2(x, y._2)((a, b) => (a + (y._1 , b))))

为什么会这样?是否可以使用逗号并仍然避免此编译时问题?

1 个答案:

答案 0 :(得分:6)

当您撰写f(a, b)时,您将2-ary函数f应用于2个参数ab。要将f应用于Tuple2 (a, b),您需要添加另一组parens:f((a, b))