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

Using forall() in extracting String from Option[String] in scala

我不明白 forAll 何时处理 None 个值。

def areTheyEqual(x: Option[String], y: String) = {
    if (x.forall(_ == y)) {
        true
    } else {
        false
    }
}

当我调用函数时: areTheyEqual(None, "hello") 这个 returns 是真的,但我认为这是假的,因为它们不相等。请帮忙。为什么会这样?

编辑:

为了解决这个问题,我将 if 语句更改为: if (x.nonEmpty && x.forall(_ == y)) 但是我还是想知道为什么没有x.nonEmpty条件就返回true.

一般来说,forall 方法检查集合中的所有对象是否都满足某个谓词。那么returns false是什么意思呢?从逻辑上讲,这一定意味着集合中有一个元素的谓词不正确。那么 None 是否包含谓词不正确的元素?显然不是,因为它根本不包含任何元素。因此,在这种情况下,forall 到 return false 是错误的。所以这一切都是有道理的。

另一方面,如果 Option 为空,exists 方法将 return false