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