我不明白forAll何时处理None值。
def areTheyEqual(x: Option[String], y: String) = {
if (x.forall(_ == y)) {
true
} else {
false
}
}
当我调用函数时:areTheyEqual(None, "hello")
这返回true,当我期望这是false时,因为它们不相等。请帮忙。为什么是这样?
编辑:
为了解决此问题,我将if语句更改为:if (x.nonEmpty && x.forall(_ == y))
但我仍然想知道为什么它在没有x.nonEmpty
条件的情况下返回true。
一般来说,forall
方法检查集合中的所有对象是否满足某个谓词。那么,当它返回false
时意味着什么呢?从逻辑上讲,这一定意味着集合中有一个元素的谓词不为真。那么None
是否包含谓词不为真的元素?显然不是,因为它根本不包含任何元素。因此,在这种情况下forall
返回false
是错误的。所以这一切都是有道理的。
另一方面,如果Option
为空,则exists
方法将返回false
。