1. ホーム
  2. ruby

[解決済み] Ruby 1.8.7 ハッシュを文字列に変換する

2022-02-25 14:06:39

質問

ruby 1.8.7で作業していなかったのですが、最近になって驚きました。

{:k => 30}.to_s #=> "k30"

Ruby 1.8.7でハッシュを文字列に変換して、以下のように表示させるための修正はありますか?

{:k => 30}.to_s #=> "{:k=>30}"

解決方法は?

hash.to_s は確かに 1.8.7 から 1.9.3 .

1.8.7 、(参照。 http://ruby-doc.org/core-1.8.7/Hash.html#method-i-to_s ):

ハッシュを [ key, value ] ペアの配列に変換し、その配列を Array#join を使ってデフォルトのセパレータで文字列に変換することにより、hsh を文字列に変換します。

1.9.3 、(参照。 http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-to_s )

の別名:inspect

1.8.7のHashクラスをモンキーパッチして、ローカルで同じことができるようにするには、以下のようにします。

class Hash
  alias :to_s :inspect
end

モンキーパッチの前。

1.8.7 :001 > {:k => 30}.to_s
 => "k30" 
1.8.7 :002 > {:k => 30}.inspect
 => "{:k=>30}"

モンキーパッチ&後。

1.8.7 :003 > class Hash; alias :to_s :inspect; end
 => nil 
1.8.7 :004 > {:k => 30}.to_s
 => "{:k=>30}"