Scala - List.map类型推断错误失败

时间:2017-02-11 17:02:46

标签: scala types

此代码编译错误

val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6)
kk2.map((n1, d1) => n1) // compile error

我想要List [Int,Double] =>列表[INT] 我该如何解决这个错误?

1 个答案:

答案 0 :(得分:2)

两件事。

首先,要使用cons运算符List[(Int, Double)]构造::,您需要将此类列表的元素(例如,在您的情况下为(1, 0.5))附加到已存在的 列表,而不是其他元素。换句话说,在::的右侧必须有一个元组列表,而不仅仅是一个元组,所以将(2, 0.6)元组包装在List中。注意:List(2, 0.6)会给你一个包含两个元素的列表,2和0.6,但是你需要一个元组元素的列表,所以你需要两对括号:List((2, 0.6))。正如在注释中正确指出的那样,您也可以以更清晰的方式执行(1, 0.5) :: (2, 0.6) :: Nil,这是一种通过仅使用cons运算符定义列表的递归方式(Nil是一个空列表)。

其次,当你映射一个元组时,你必须使用部分函数来启动模式匹配机制,或者简单地说,你需要case

所以:

val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6) :: Nil
kk2.map { case (n1, d1) => n1 } // List(1,2)