неявное преобразование для списка кортежей - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь неявно преобразовать List[(Int, String)] в List[(IntWrap, String)], что приводит к ошибке TypeMismatch.

Я пробовал несколько других конверсий, которые работают, которые List[Int] до List[IntWrap] и Tuple2[Int, String] до Tuple2[IntWrap, String], что работает.

case class IntWrap(a : Int)

implicit def int2IntWrap(x: Int) = IntWrap(x)

implicit def int2IntWrapForTuple2(tuple: Tuple2[Int, String])  = (IntWrap(tuple._1), tuple._2)

//Defined few methods
def foo(t : (IntWrap, String)) = println(t._2)

def foo_list(t: List[IntWrap]) = println(t.size)

def foo_list_tuple(t : List[(IntWrap, String)]) = println(t.size)

foo(3 -> "hello") //this works

foo_list(List(1, 2, 3)) //this works

val l :  List[(IntWrap, String)] = List(3 -> "hello")

foo_list_tuple(l) //this works

val l1 = List(3 -> "hello")
foo_list_tuple(l1) //this one doesn't work
//error: type mismatch; found: List[(Int, String)] required: List[(IntWrap, String)]

Как я могу сделать эту работу?

1 Ответ

1 голос
/ 05 июня 2019

Попробуйте определить неявное преобразование следующим образом:

implicit def listOfTupleToListOfIntWrapTuple(l: List[(Int, String)]): List[(IntWrap, String)] =
  l.map(tuple => (IntWrap(tuple._1), tuple._2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...