Ruby 1.8.7 конвертирует хэш в строку

Я не работал с ruby ​​1.8.7 и недавно был удивлен, что:

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

Есть ли готовое исправление для преобразования хэша в строку для ruby ​​1.8.7, чтобы оно выглядело так:

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

person megas    schedule 19.02.2013    source источник


Ответы (1)


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):

Преобразует hsh в строку путем преобразования хэша в массив пар [ключ, значение] и последующего преобразования этого массива в строку с помощью Array#join с разделителем по умолчанию.

В 1.9.3 (ссылка: http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-to_s)

Псевдоним для: проверить

Вы можете изменить класс Hash в 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}" 
person Prakash Murthy    schedule 19.02.2013
comment
Как я могу вернуть хеш из результата inspect. - person Faizaan Gagan; 13.08.2019