這段代碼編譯錯誤斯卡拉 - List.map類型推斷錯誤失敗
val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6)
kk2.map((n1, d1) => n1) // compile error
我想名單[詮釋,雙] =>列表[INT] 我怎樣才能解決這個問題?
這段代碼編譯錯誤斯卡拉 - List.map類型推斷錯誤失敗
val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6)
kk2.map((n1, d1) => n1) // compile error
我想名單[詮釋,雙] =>列表[INT] 我怎樣才能解決這個問題?
兩件事。
首先,使用利弊操作::
構建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)
你沒有說的到底是什麼。如果只是推理錯誤,請添加註釋。使用 – Carcigenicate
。 tup => tup._1 – kimyongin
這是錯誤嗎?這看起來不像是一個錯誤,或者至少不是全部。 – Carcigenicate