У меня есть некоторый код, подобный следующему, где у меня есть функция, которая принимает List [TypeA], и я хочу иметь возможность вызывать его с List [TypeB], где у меня есть неявное преобразование из TypeA в TypeB.
У меня есть пример кода, который работает, когда я вызываю метод со встроенным списком, но не работает, если список сначала назначен переменной.
Вот код, который работает:
class Person(val name: String)
implicit def stringToPerson(str: String) : Person = new Person(str)
def printAll(list: List[Person]) {
list.foreach(person => println("Person: " + person.name))
}
def callIt = {
printAll(List("1","2","3"))
}
К сожалению, это не работает, если callIt выглядит так:
def callIt = {
val list = List("1","2","3")
printAll(list)
}
Я получаю сообщение об ошибке, что он ожидает List [Person], но я даю List [String]
В моем реальном коде список уже определен где-то еще, поэтому он не работает. Что я могу сделать, чтобы он использовал неявное преобразование из String в Person, и почему он работает в первом случае, а не во втором?
Примечание: это также работает, если я указываю тип списка и затем выполняю преобразование:
val list: List[Person] = List("1","2","3")
Но опять же, это не то, что я хочу.
Действительно ли мне нужно обеспечить неявное преобразование из List [String] в List [Person]?