越水です。

ある方からuri.rbに関する提案を2ついただきました。

1つは、GenericURI#create_relative_uriがURIオブジェクトを受け取るよう
にしてはどうかというもの。

もう1つは、getterメソッドをdupを使わずに実装してはどうかというもので
す。

create_relative_uriの変更は、大きなメリットがあるとは思えませんでした。
URIオブジェクトは、常に絶対URIを表しているからです。たとえば、もし
create_relative_uriを変更したとして:

uri_a = URI.create('http://www.ruby-lang.org/')
uri_b = URI.create('http://www.ruby-lang.org/en/whos.html')
uri_c = uri.create_relative_uri(uri_b)

というコードがあっても、これは結局:

uri_a = URI.create('http://www.ruby-lang.org/')
uri_b = URI.create('http://www.ruby-lang.org/en/whos.html')
uri_c = uri_b.dup

と同じことです。

次に、getterメソッドの話です。自分でもコードを見て驚いたのですが(笑)、
Generic@components (Hashオブジェクト)そのものはfreezeしているものの、
その中の個々の文字列まではfreezeしていませんでした。

getterメソッドでdupを使わずに返すようにするとなると、@components中の文
字列をfreeze しなければなりません。これらをfreezeして、dupを使わないよ
うに変更しても構いませんか? @component中の文字列をfreezeしてはならな
い理由は思いつきません。

越水
greentea / fa2.so-net.ne.jp