3

我不明白什么时候 forAll 处理 None 值。

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

当我调用函数时: areTheyEqual(None, "hello")this 返回 true,当我期望 this 为 false 时,因为它们不相等。请帮忙。为什么会这样?

编辑:

为了解决这个问题,我将 if 语句更改为: if (x.nonEmpty && x.forall(_ == y)) 但我仍然想知道为什么它在没有x.nonEmpty条件的情况下返回 true。

4

1 回答 1

4

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

exists另一方面,false如果Option为空,则该方法将返回。

于 2020-07-17T02:19:17.770 回答