takayuki_tk's diary

本当はScalaとかHaskellを使いたい

抽出子の復習

久しぶりに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"
  }
}