在Scala Option中,isDefined和nonEmpty方法有什么区别?这两者之间是否有任何性能差异?
答案 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
所以,从逻辑上讲,两者之间没有区别。