Scala: передача начального NULL в foldLeft
Есть ли способ пройти null
к Скале foldLeft
и все еще получить что-то еще в качестве значения результата?
Пример:
def cc (str0: String, str1: String): String = {
if (str0 == null) {
return str1
} else {
return str0 + "/" + str1
}
}
val list = List("1.txt", "2.txt", "3.txt")
list.foldLeft(null)(cc)
Это невозможно, потому что возвращаемое значение foldLeft null
в этом случае.
Есть ли способ архивировать то, что мне нужно?
1 ответ
Решение
Вам нужно сделать тип, который вы сворачиваете, явным образом: list.foldLeft(null: String)(cc)
или же list.foldLeft[String](null)(cc)
, Вопрос в том, что 1) null
Предполагается, чтобы иметь тип Null
(если контекст не требует другого типа); 2) вывод типа работает слева направо, поэтому после просмотра foldLeft(null: Null)
параметр типа foldLeft
фиксируется быть Null
а также cc
должен иметь тип (Null, String) => Null
что это не так.