読者です 読者をやめる 読者になる 読者になる

String#to_sとHash#to_hashの挙動

Ruby
% irb
irb(main):001:0> class MyString<String;end
=> nil
irb(main):002:0> s=MyString.new("abc")
=> "abc"
irb(main):003:0> s.to_s.class
=> String

String#to_sはStringが返ります。

irb(main):004:0> class MyHash<Hash;end
=> nil
irb(main):005:0> h=MyHash.new()
=> {}
irb(main):006:0> h.to_hash.class
=> MyHash

Hash#to_hashはselfが返ります。

このように、継承すると挙動が変わって困る場合があります。 特に、継承したHashからHashを作る方法が わからなくて私は困ったのですが、

irb(main):015:0> Hash[h].class
=> Hash

これでなんとかいけます。

さて、to_sとかto_hashは何を返すべきなんでしょうね。 私はto_sなんだからString、to_hashなんだからHashを返すべきだと思うんですけどね。