使用forall()从scala中的Option[String]中提取字符串



我不明白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

相关内容

  • 没有找到相关文章

最新更新