抽出子の復習
久しぶりにscala触っててなんで抽出子がパターンマッチで使えるのかわからなくなったので遊んでみた。
object Sample1 { def unapply(v: Int): Option[String] = if (v == 1) Some("ok1") else None } object Sample2 { def unapply(v: Int): Option[String] = if (v == 2) Some("ok2") else None } def hoge(v: Int) : String = v match { case Sample1(n) => n case Sample2(n) => n case _ => "ng" } println(hoge(1)) // ok1 println(hoge(2)) // ok2 println(hoge(3)) // ng
ようするにこれと同じことかな。
def hoge(v: Int) : String = { if (Sample1.unapply(v).isDefined) { return Sample1.unapply(v).get } else if (Sample2.unapply(v).isDefined) { return Sample2.unapply(v).get } else { "ng" } }