10

私は ruby​​ 1.8.7 で作業していませんでしたが、最近、次のことに驚きました。

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

Ruby 1.8.7のハッシュを文字列に変換して次のようにする修正を使用する準備はできていますか?

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

1 に答える 1

19

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 )

の別名: 検査

1.8.7 のハッシュ クラスにモンキー パッチを適用して、次のようにローカルで同じことを行うことができます。

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}" 
于 2013-02-19T12:23:30.073 に答える