次のコードを "Scala way"にしたり、マッチさせたりするには、どのように書き換えることができますか?Scala:Option [Foo]とFooのパラメータとのパターンマッチング
case class Foo(bar: Any)
val fooOpt = Some(Foo("bar as String"))
def isValid(p: Any) = p match {
case _ @ (_: String | _: Int) => true
case _ => false
}
//Is it possible to check for the type of bar directly in this if statement?
fooOpt match {
case Some(f) if isValid(f.bar) => doSomething
case _ => doSomethingElse
}
代わりに、isInstanceOfを使用します。
fooOpt match {
case Some(f) if f.bar.isInstanceOf[String] => doSomething
case Some(f) if f.bar.isInstanceOf[Int] => doSomething //could also rewrite to use just one case
case _ => doSomethingElse
}
他にもありますか?
乾杯を使用するように書き換えることができます!完璧な意味合いを持つ。そこにいくつかの簡単で簡単な解決策があるという気持ちがありました!ありがとう – Bruno
btw、Fooに複数のパラメータがあった場合、それらをすべて記述することなく 'bar'をどのように選択しますか? – Bruno
@Bruno他のパラメータにはアンダースコアパターンを使用してください。だから 'Some(Foo(i:Int、_、_))'のようなものは、さらに2つのパラメータを 'Foo'に追加します。 – Alec