У меня есть код, похожий на следующий, где у меня есть функция, которая принимает List [TypeA], и я хочу, чтобы иметь возможность вызвать ее с помощью List [TypeB], где я имеют неявное преобразование из TypeA в TypeB.Scala неявное преобразование общего аргумента
У меня есть пример кода, который работает, когда я вызываю метод со строкой List, но не работает, если сначала список присваивается переменной.
Вот код, который работает:
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)
}
Я получаю ошибку, что она ожидает получить список [Person], но я 'm дает список [String]
В моем фактическом коде у меня есть список, уже определенный где-то в другом месте, поэтому он не работает. Что я могу сделать, чтобы использовать неявное преобразование из String в Person, и почему оно работает в первом случае, но не во втором?
Примечание стороны: он также работает, если я указать тип списка и это сделать преобразование тогда:
val list: List[Person] = List("1","2","3")
Но опять же, это не то, что я хочу.
Действительно ли мне нужно обеспечить неявное преобразование из списка [String] в List [Person]?
вы должны определить метод printAll как: def printAll [T <% Person] (ls: List [T]) = {} – Eastsun