[#37248] [Feature:1.9] Enumerator#inspect — "Yusuke ENDOH" <mame@...>

遠藤です。

12 messages 2008/12/02

[#37337] [Feature #841] Object#self — "rubikitch ." <redmine@...>

Feature #841: Object#self

13 messages 2008/12/09

[#37513] Current status of 1.9.1 RC1's issues — "Yugui (Yuki Sonoda)" <yugui@...>

Hi, folks

14 messages 2008/12/20
[#37516] Re: Current status of 1.9.1 RC1's issues — Masatoshi SEKI <m_seki@...> 2008/12/20

咳といいます。

[#37576] [BUG:trunk] encoding for stdio's — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

11 messages 2008/12/24

[ruby-dev:37317] Re: RSS::Maker.create(version)

From: Kouhei Sutou <kou@...>
Date: 2008-12-08 11:28:44 UTC
List: ruby-dev #37317
須藤です。

In <86hc5mvmem.knu@iDaemons.org>
  "[ruby-dev:37246] Re: RSS::Maker.create(version)" on Tue, 2 Dec 2008 20:31:11 +0900,
  "Akinori MUSHA" <knu@iDaemons.org> wrote:

> > もう1つ思いついたのですが、これではどうでしょうか?
> >
> >   maker = RSS::Maker[version].new
> >
> > or
> >
> >   maker = RSS::MAKERS[version].new
> >
> > こっちの方が変なことをしていないように見える気がします。
> 
> 確かにハッシュだと変なことをしていないように見えますが、むしろ
> 将来高度なこと、たとえば version 文字列に表記揺れを認めるとか、
> 追加パラメータを取り、(クラスでなく) new/make メソッドを持つ
> オブジェクトを生成して返すとか、モジュールを動的ロード化する
> とか、そういうことを実現する際の足かせになる懸念があります。
> 
> もちろん .[]() や Hash#default_proc で対応は可能でしょうが、
> それこそ変なことをしていると言われそうです。

RSS::MAKERSというハッシュがもうすでにある状態で、説明なしに
RSS::MAKERS[]というコードをだしたのは失敗でした。すみません。

ハッシュではなく[]を持つオブジェクトを用意するつもりでした。
私は、[]はハッシュっぽく見せるものというよりも、コンテナっぽ
いオブジェクトへの一般的なアクセス記法だと思っています。「何
かを加える・結合する」動作一般に「+」を使うような感覚です。
(例がよいかどうかはあまり自信がありません。ごめんなさい。)

RSS::Maker[version].newでRSS::Makerを使っているのは、現時点
ではRSS::Makerが唯一外にでているオブジェクトなので、そいつが
エントリポイントになるとよいと思ったからです。

RSS::MAKERS[version].newの方は、MAKERSという複数形の方がコン
テナっぽさがでるかと思ったからです。


[]で(少し?)高度な取得処理を実行するのはそれほど珍しいこと
ではないと思います。

例えば、HTTPヘッダを取得するAPIとして[] を使用しているオブジェ
クトではキー(HTTPヘッダの名前)を正規化して値を返しています。
(net/http.rbのNet::HTTPHeader、xmlrpc/httpserver.rbの
HttpServer::Table、webrick/httprequest.rbの
WEBrick::HTTPRequest)

Array#[]は、もっと高度でインデックスをとるだけではなく、開始
位置と長さの2引数をとったり、Rangeをとったりもします。


ということで、私はバージョン文字列から対応するmakerクラスを
取得するのには[]がよいかと思っていました。


ちなみに、現在でもRSS::Maker.makeはversion文字列の表記揺れを
認めていたりします。


> 従って、ハッシュ(に見えるもの)を露出させるよりもメソッドとして
> 提供する方がインターフェースとしては好ましいと私は思います。


RSS::Maker.findはどうでしょうか。

In This Thread