如果true
包含特定值,我想写一个返回Option[Int]
的方法,否则返回false。这样做的惯用方法是什么?
var trueIf5(intOption: Option[Int]): Boolean {
intOption match {
case Some(i) => i == 5
case None => false
}
}
上述解决方案显然有效,但Scala文档将此方法标记为less-idiomatic。
我是否可以使用map
,filter
或其他方式做同样的事情?
我做到了这一点,但它只会将问题更改为“如果选项包含true
则返回true”,这实际上与“如果选项包含5
则返回true”相同。
var trueIf5(intOption: Option[Int]): Boolean {
intOption.map(i => i == 5).???
}
答案 0 :(得分:14)
因为您正在测试它是否包含值:
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
答案 1 :(得分:12)
intOption.exists(_ == 5)
答案 2 :(得分:3)
为什么没有人建议:
intOption == Some(5)