質問

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、しかし、もう1つの厄介な代替手段があります:

Some(2) exists (_ == 2)
val opt = Some("oxbow")
opt match {
  case Some("lakes") => //Doing something
  case _ => //If it doesn't match
}

for-comprehensionも使用できます:

for {val v <- opt if v == "lakes"}
  // do smth with v

パターンマッチングも使用できると思います。そうすれば、興味深い値を直接抽出できます:

val opt = Some("oxbow")
opt match {
  case Some(value) => println(value) //Doing something
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top