oxb*_*kes 29 scala code-readability option
我经常发现自己有一种Option[T]类型,T并希望测试选项的价值对某些价值.例如:
val opt = Some("oxbow")
if (opt.isDefined && opt.get == "lakes")
//do something
Run Code Online (Sandbox Code Playgroud)
以下代码是等效的,并删除了测试选项值是否存在的要求
if (opt.map(_ == "lakes").getOrElse(false))
//do something
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说似乎不太可读.其他可能性是:
if (opt.filter(_ == "lakes").isDefined)
if (opt.find(_ == "lakes").isDefined) //uses implicit conversion to Iterable
Run Code Online (Sandbox Code Playgroud)
但我不认为这些明确表达的意图要么更好,因为:
if (opt.isDefinedAnd(_ == "lakes"))
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的方法来做这个测试?
Wal*_*ang 41
怎么样
if (opt == Some("lakes"))
Run Code Online (Sandbox Code Playgroud)
这清楚地表达了意图并且是直截了当的.
Dan*_*ral 14
Walter Chang FTW,但这是另一个尴尬的选择:
Some(2) exists (_ == 2)
Run Code Online (Sandbox Code Playgroud)
val opt = Some("oxbow")
opt match {
case Some("lakes") => //Doing something
case _ => //If it doesn't match
}
Run Code Online (Sandbox Code Playgroud)