2006-09-22 (Fri) [長年日記]
_ Visiterパターンとブロック
確かにブロックを持つRubyではVisitorパターンや、Iteratorパターンは もはやパターンとは呼べないレベルだし
[Matzにっき(2006-09-15)より引用]
Visitorパターンの肝は、ダブルディスパッチを使って、visit対象の型による分岐(eval.cみたいなの)をメソッドディスパッチに置き換えるところにあると思うのですが、これってブロックで代替できるんでしょうか。 たんに各ノードを辿るだけならブロックでいいと思うんですが。
Visitorパターンに対応する言語機能はブロックというよりはマルチメソッドじゃないのかなあ。 Iteratorパターンを使いたくないような時に、Visitorパターンはよく使う ので気になるところ。
Visitorパターンについては走査についてだけ考えてました。<br>ダブルディスパッチの部分はRubyならHashとProcを組み合わせるんじゃないでしょうか。
HashとProcを使うよりは、Visitorパターンの方が好みですねえ。<br>たんにダブルディスパッチが好きなだけかもしれないですが。
Visitorパターンのダブルディスパッチはデフォルト値とか書けないんで面倒なんですよね。<br>この辺を積極的に支援するためにはそれこそマルチメソッドが欲しくなりますね。
そこでmethod_missingですよ(ウソ)