2014-10-27 47 views
2

有沒有辦法將null傳遞給Scala的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 2014-10-27 08:07:39

回答

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 2014-10-27 09:18:41