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プログラムが動作するのかどうかは不明。多分動かない。