在没有x =>的情况下使用折叠选项X

时间:2015-07-01 20:18:07

标签: scala

假设:

val personsOpt:Option[List[Person]] = ???

我更喜欢:

persons = personsOpt.fold(List[Person]()){person => person}

对此:

persons = personsOpt.getOrElse(List[Person]())

出于类型安全原因。例如,这不编译:

persons = personsOpt.fold(Nil){person => person}

是否有一种简单的方法可以获得类型安全但没有{person => person}

编辑:现在具体理解两件事:

  1. 关于getOrElse,没有什么是非类型安全的。例如,这不会编译:{{1​​}}
  2. personsOpt.getOrElse("")Nil,如果无法推断其类型,编译器会要求您明确。因此,使用List()
  3. 时不会出现类型问题

    我现在无法找到该链接,但我(错误地)认为Nil在某种程度上比使用getOrElse fold更不安全。

1 个答案:

答案 0 :(得分:5)

identity中定义了函数Predef

persons = personsOpt.fold(List[Person]())(identity)

我觉得这比使用getOrElse的可读性低得多,使用它并不会使您的代码比使用getOrElse更安全。请注意,将Nil传递给getOrElse会使其返回正确的类型:

scala> case class Person(name: String)

scala> val personsOpt:Option[List[Person]] = None
personsOpt: Option[List[Person]] = None

scala> val persons = personsOpt.getOrElse(Nil)
persons: List[Person] = List()

请注意,personsList[Person]