パターンマッチング
パターンは、ノードaに対してマッチングされ、マッチングが成功すると内容が評価されてパターン全体の値を得る。マッチング失敗のときは、内容の評価に進まず、評価は中止される。
説明の便宜上の話であるが、マッチングの失敗を表すためにundefinedを使う。つまり:
- パターンマッチングが失敗したら、eval(a, P) はundefinedを返す。
- パターンマッチングが成功したら、eval(a, P) はundefined以外を(nullでもよい)を返す。
マッチングが成功するとは:
- ノードaがパターンPのセレクターにマッチする。
- 条件式があるときは、条件式を評価した値がすべて真になる。
条件式の真偽値は次のように定義される。
- false, null, undefined, [], {} は偽である。({}は追加)
- その他はすべて真である。
条件式は、ノードaをコンテキストノードとして評価される。つまり、内容と同じ評価環境で条件式が評価される。元のパターンと同じ評価環境ではない。