2013-02-19 21 views
7

Ich arbeite nicht mit Ruby 1.8.7 und vor kurzem war ich überrascht, dass:Rubin 1.8.7 convert Hash-String

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

Gibt es bereit fix verwenden Hash-String für 1,8 Rubin zu konvertieren. 7, um es so aussehen:

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

Antwort

15

hash.to_s hat in der Tat 1.8.7-1.9.3 geändert.

In 1.8.7, (Ref: http://ruby-doc.org/core-1.8.7/Hash.html#method-i-to_s):

Wandelt hsh in einen String durch den Hash auf ein Array von [Schlüssel, Wert] Paare Umwandeln und dann in eine Zeichenfolge, die Array-Umwandlung unter Verwendung von Array # beitreten mit dem Standardtrennzeichen.

In 1.9.3, (ref: http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-to_s)

Alias ​​für: inspizieren

Sie könnten Klasse Hash Affe-Patch in 1.8.7 das gleiche lokal mit dem folgenden Funktionen ausführen:

class Hash 
    alias :to_s :inspect 
end 

Bevor Affe-Patching:

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

Monkey-Patching & nach:

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