部分関数 (PartialFunction)

部分関数 (PartialFunction) とは?

  • 特定の引数に対してのみ結果を返して、それ以外の場合には scala.MatchError を吐いて死ぬ関数。
  • 結果を返せるかどうかは isDefinedAt メソッドで判定する。
  • PartialFunction トレイトに入れる。
val foobar: PartialFunction[String, String] = { case "foo" => "bar" }

foobar("foo")
// "bar"

foobar.isDefinedAt("foo")
// true


foobar("bar")
// scala.MatchError

boobar.isDefinedAt("bar")
// false

case を複数指定したり、ワイルドカードを使うことも出来る。

val number: PartialFunction[Int, String] = {
  case 1 => "one"
  case 2 => "two"
  case _ => "many"
}

orElse 演算子で複数の部分関数を結合できる

val one: PartialFunction[Int, String] = { case 1 => "one" }
val two: PartialFunction[Int, String] = { case 2 => "two" }
val many: PartialFunction[Int, String] = { case _ => "many" }

val nember = one orElse two orElse many

number(1)
// "one"

number(5)
// "many"

参考資料