2017-02-11 112 views
-1

这段代码编译错误斯卡拉 - List.map类型推断错误失败

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

我想名单[诠释,双] =>列表[INT] 我怎样才能解决这个问题?

+0

你没有说的到底是什么。如果只是推理错误,请添加注释。使用 – Carcigenicate

+0

。 tup => tup._1 – kimyongin

+0

这是错误吗?这看起来不像是一个错误,或者至少不是全部。 – Carcigenicate

回答

2

两件事。

首先,使用利弊操作::构建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) 
+0

'(1,0.5)::(2,0.6):: Nil'会更习惯 –

+0

约定和编辑 – slouc

+0

更改“So:”之后的位? :) –