Scala - Ошибка вывода типа List.map
Ошибка компиляции этого кода
val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6)
kk2.map((n1, d1) => n1) // compile error
я хочу список [Int, Double] => список [Int], как я могу решить эту ошибку?
1 ответ
Две вещи.
Во-первых, чтобы построить 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)