From: Akinori MUSHA Date: 2008-12-10T22:22:07+09:00 Subject: [ruby-dev:37349] Re: RSS::Maker.create(version) --pgp-sign-Multipart_Wed_Dec_10_22:28:50_2008-1 Content-Type: text/plain; charset=ISO-2022-JP At Wed, 10 Dec 2008 21:44:53 +0900, Kouhei Sutou wrote: > > 須藤です。 > > In <86bpvl3ayx.knu@iDaemons.org> > "[ruby-dev:37333] Re: RSS::Maker.create(version)" on Tue, 9 Dec 2008 19:15:04 +0900, > "Akinori MUSHA" wrote: > > >  ということで RSS::Maker[], RSS::Maker.find() ともに賛成です。 > > RSS::Maker[]の方でコミットしました。 > > で、コミットしてから気付いてしまったのですが、RSS::Maker[]で > はクラスではなくオブジェクトを返した方が使いやすそうな気がし > ました。(今はクラスですらなく、クラスとバージョンを持ってい > るハッシュを返すようにしてしまったので、いずれにしても後で直 > します。) > > makerオブジェクトを作るときはフィードのバージョンを引数に与え > ることができるのできます。これは、RSS 0.91と0.92を同じ > RSS::Maker::RSS09クラスで対応しているためです。 > > デフォルトでは、RSS::Maker::RSS09クラスは0.92用のRSSを生成し > ます。0.91用のRSSを生成するためには明示的に0.91を指定する必 > 要があり、その場合はこのように書かなければいけなくなります。 > > maker = RSS::Maker["0.91"].new("0.91") > # 参考: 0.92の場合 > # maker = RSS::Maker["0.92"].new  なるほど…。new()でも引数を取るのはどうしてだろうと思ったら そういうことでしたか。まったく意識から抜けていました。  RSS::Maker["0.9"].new("0.91") という形ならありだと思います。  しかし、 0.91 と 0.92 のクラスが同じで new() の引数で分ける、 という実装上の都合はあまり利用者には意識させたくないですね。  0.91 用にサブクラスを作り、 RSS::Maker["0.91"] と指定されたら それを返すようにした方がいいかもしれません。 > そのため、RSS::Maker[]でクラスを返すのではなく、オブジェクト > を返してこのように使えた方がよい気がするのですが、これでもよ > いでしょうか? > > maker = RSS::Maker["0.91"]  コンテナの中身に(同じキーで)アクセスすると毎回新しいものが 出てくるというのは、少し違和感があるかも…。  インスタンスを返す形だと、始めに戻ってしまいますが maker = RSS::Maker.create("0.91") の方が読みやすく感じます。create という語にはやはり強い抵抗を お感じになるでしょうか。 -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Wed_Dec_10_22:28:50_2008-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEABECAAYFAkk/xBIACgkQkgvvx5/Z4e5YSACg07wmUrs+GhmLERrWIzj8euLR sdIAn1vdS/ZpO2URnxR2/CmjjBTWaZ1y =Pm/4 -----END PGP SIGNATURE----- --pgp-sign-Multipart_Wed_Dec_10_22:28:50_2008-1--