2014-10-27 2 views
2

Есть ли способ передать null Scala's foldLeft и все еще получить что-то еще в качестве результата?Scala: передача начального значения 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.

Есть ли способ архивировать то, что мне нужно?

+7

Вы используете холодное использование 'reduceOption' вот так:' list.reduceOption {_ + "/" + _} .orNull'. – senia

ответ

2

Вам необходимо сделать тип, который вы складываете по явным: list.foldLeft(null: String)(cc) или list.foldLeft[String](null)(cc). Выясняется, что 1) null имеет тип Null (если контекст не требует другого типа); 2) тип вывода работает слева направо, поэтому после просмотра foldLeft(null: Null) параметр типа foldLeft фиксирован как Null, а cc должен иметь тип (Null, String) => Null, которого нет.

+0

Большое спасибо, это помогло мне. – Hannes

Смежные вопросы