一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

Partial Functionについて

Scala勉強会@東京のまとめとか、implicit conversionについては追々書く事にして、とりあえず気になったPartial Functionについて。これプレゼンを見た時にはよく分からなかったけど、復習してみたら「なるほど」と思ったので、自分なりにまとめてみる。

要するに、パターンマッチャの実装から、パターンマッチャの定義域チェックの為の関数isDefinedAt()を自動的に定義してくれる仕組みなんだな、と思った。

プレゼン中の例から抜粋すると、

val fib :PartialFunction[Int, Int] = {
  case 0 | 1 => 1
  case n if n > 1 => fib(n - 1) + fib(n - 2)
}

という風に、PartialFunction[X, Y]型の変数(関数)fibを定義(0, 1の時には1を返し、1より大きい時はfib(n-1)+fib(n-2)を返す)が定義されていると、勝手に、

def isDefinedAt(Int) :Boolean = {
  case 0 | 1 => True
  case n if n > 1 => True
  else => False
}

という関数を定義してくれるのと等価っぽい。

んー、しかし細かいところは相変わらずよく分かってない。リファレンスをきっちり読まないとダメだなー。後、上記のScalaプログラムが動作するのかどうかは不明。多分動かない。