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 что это не так.

Другие вопросы по тегам