enhydraの日記: RubyとVisitorパターン
Perl同族のRubyでVisitorパターンはどう実装してるのか興味を持って調べていたのだが、なんか違うぞ!まず逆輸入された「プログラミングRuby」を参照してみると、第25章オブジェクト指向設計用ライブラリ P553での説明。
?
visotorパターンはコレクションの内部構成を知らずにコレクションを操作する方法の一つです。
?
へ、そう? で説明は
?
eachメソッドが実現していることです。
?
まさかと思って原著を調べたら
?
The Visitor pattern (Design Patterns, ) is a way of traversing a collection without having to know the internal organization of that collection.
?
おぉ、忠実な翻訳だ。納得が行かないので正誤表を探すためにruby-listメーリングリストのアーカイブを検索していたところ、98年ごろに、まつもとゆきひろ氏が別件で投稿したコメントでは
?
Visitor
コンテナ(あるいはオブジェクト群を表現する構造)の中身を順にたどっていくためのパターン.Rubyではクラスの関係(パターン)ではなく,イテレータで実現する
?
と解説している。なんかどれもIteratorパターンの解説なんですけど。どこにもVisitorパターン本来の
オペレーションを加えるオブジェクトのクラスに変更を加えずに、新しいオペレーションを定義することができるようになる。
な話が出てこない。もちろんこれらの情報を受けてか、同じような解説をしてしまっている個人のサイトも幾つか存在する。
全部 s/Visitor/Iterator/ の間違いだ。それともRubyの世界では本当にVisitorパターンは
?
オブジェクトの集合を順に辿ってゆくためのパターン
?
として扱われていて、かつRubyのeachには私の知らない役割が在るのだろうか。
Ruby使いのヒト情報求む ←マジで
RubyとVisitorパターン More ログイン