2014-10-27 77 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