Scala Option的区别在于undefined和nonEmpty方法

时间:2014-03-21 22:47:18

标签: scala

在Scala Option中,isDefined和nonEmpty方法有什么区别?这两者之间是否有任何性能差异?

4 个答案:

答案 0 :(得分:22)

查看来源,nonEmpty的定义是:

  

final def nonEmpty = isDefined

答案 1 :(得分:3)

它们实际上是相同的。我相信nonEmpty主要是为了与Collection API保持一致。

答案 2 :(得分:3)

你可能会反过来看。

如果Option未提供nonEmpty,则会通过转换为Iterable来提供,toList会调用Option

是否要将List变为nonEmpty只是为了查看该属性?当然不是。

所以问题不在于isDefined相对于lengthCompare是否更有效,而是相对于转换而言。

如果它依赖于转换,它将最终执行{{1}},这将创建一个迭代器作为开销。

所以答案是你可以使用你喜欢的任何方法。

答案 3 :(得分:1)

来自Scala 2.13.x代码库,它是:

def isDefined: Boolean = !isEmpty
...
final def nonEmpty = isDefined

所以,从逻辑上讲,两者之间没有区别。