2017-02-11 66 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:」之後的位? :) –