Я пытаюсь реорганизовать функцию (qaru.site/info/42120/...), чтобы сделать ее несколько более общей. Здесь исходное определение функции:
def tryProcessSource(
file: File,
parseLine: (Int, String) => Option[List[String]] =
(index, unparsedLine) => Some(List(unparsedLine)),
filterLine: (Int, List[String]) => Option[Boolean] =
(index, parsedValues) => Some(true),
retainValues: (Int, List[String]) => Option[List[String]] =
(index, parsedValues) => Some(parsedValues)
): Try[List[List[String]]] = {
???
}
И вот что я пытаюсь изменить:
def tryProcessSource[A <: Any](
file: File,
parseLine: (Int, String) => Option[List[String]] =
(index, unparsedLine) => Some(List(unparsedLine)),
filterLine: (Int, List[String]) => Option[Boolean] =
(index, parsedValues) => Some(true),
transformLine: (Int, List[String]) => Option[A] =
(index, parsedValues) => Some(parsedValues)
): Try[List[A]] = {
???
}
Я продолжаю получать ошибку выделения в редакторе IntelliJ на Some(parsedValues)
, который гласит: "Выражение типа Some [List [String]] не соответствует ожидаемому типу Option [A]". Я не смог понять, как правильно изменить определение функции для удовлетворения требуемого условия; то есть ошибка исчезает.
Если я изменю transformLine
на это (замените общий параметр A
на Any
)...
transformLine: (Int, List[String]) => Option[Any] =
(index, parsedValues) => Some(parsedValues)
... ошибка уходит. Но я также теряю сильную типизацию, связанную с общим параметром.
Любая помощь в этом очень ценится.