我想写一个方法,如果Option[Int]
包含特定值,则返回true
,否则返回false。做这件事的惯用方法是什么?
var trueIf5(intOption: Option[Int]): Boolean {
intOption match {
case Some(i) => i == 5
case None => false
}
}
上述解决方案显然有效,但Scala文档认为这种方法不太习惯。
有没有什么方法可以用map
、filter
或其他东西做同样的事情?
我已经做到了这一点,但它只将问题更改为"如果Option包含true
,则返回true",这实际上与"如果Option含有5
,则返回true"相同。
var trueIf5(intOption: Option[Int]): Boolean {
intOption.map(i => i == 5).???
}
由于您正在测试它是否包含值:
scala> Some(42) contains 42
res0: Boolean = true
不要忽视你的-Xlint
:
scala> Option(42).contains("")
res0: Boolean = false
scala> :replay -Xlint
Replaying: Option(42).contains("")
<console>:12: warning: a type was inferred to be `Any`; this may indicate a programming error.
Option(42).contains("")
^
res0: Boolean = false
这些内置警告在普遍平等的情况下没有那么有效:
scala> Option(42).exists("" == _) // no warning
res1: Boolean = false
intOption.exists(_ == 5)
文档
为什么没有人建议:
intOption == Some(5)