测试期权价值的更好方法是什么?
-
05-07-2019 - |
题
对于某些类型 T
,我经常发现自己使用 Option [T]
,并希望根据某个值测试该选项的值。例如:
val opt = Some("oxbow")
if (opt.isDefined && opt.get == "lakes")
//do something
以下代码是等效的,并删除了测试选项值的存在的要求
if (opt.map(_ == "lakes").getOrElse(false))
//do something
然而,这对我来说似乎不太可读。其他可能性是:
if (opt.filter(_ == "lakes").isDefined)
if (opt.find(_ == "lakes").isDefined) //uses implicit conversion to Iterable
但我不认为这些明确表达了更好的意图:
if (opt.isDefinedAnd(_ == "lakes"))
有没有人有更好的方法来做这个测试?
解决方案
怎么样
if (opt == Some("lakes"))
这清楚地表达了意图并且很直接。
其他提示
对于Scala 2.11,您可以使用 Some(foo).contains(bar)
Walter Chang FTW,但这是另一个尴尬的选择:
Some(2) exists (_ == 2)
val opt = Some("oxbow")
opt match {
case Some("lakes") => //Doing something
case _ => //If it doesn't match
}
你也可以使用for-understanding:
for {val v <- opt if v == "lakes"}
// do smth with v
我认为也可以使用模式匹配。这样你直接提取有趣的值:
val opt = Some("oxbow")
opt match {
case Some(value) => println(value) //Doing something
}
不隶属于 StackOverflow