Как мне изменить Hash.inspect или Array.inspect? (aka .to_s) в Ruby - PullRequest
8 голосов
/ 15 августа 2011

Я случайно сохранил хэш Ruby в строку в Ruby 1.9, вызвав my_hash.to_s, что равно my_hash.inspect. Это дало мне строку, подобную этой:

'{"foo"=>{"bar"=>"baz", "qux"=>"quux"}' 

Теперь я хочу вернуть это обратно в хеш. Как это сделать?

Я не ищу объяснений по поводу других методов сериализации, я их знаю. Мне просто нужен способ вернуть это обратно, чтобы я мог сохранить его правильно.

Ответы [ 2 ]

19 голосов
/ 15 августа 2011

Самый быстрый ответ: eval.

my_hash = eval(my_str_hash)
6 голосов
/ 15 августа 2011

Оцените.

Конечно, это небезопасно для произвольного ввода, но вы сказали, что знаете о проблемах сериализации. Он не будет работать для коллекций, содержащих рекурсивные ссылки или другие объекты, для которых eval (x.inspect)! = X.

...