在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))))
为什么会这样?是否可以使用逗号并仍然避免此编译时问题?
答案 0 :(得分:6)
当您撰写f(a, b)
时,您将2-ary函数f
应用于2个参数a
和b
。要将f
应用于Tuple2
(a, b)
,您需要添加另一组parens:f((a, b))
。