是否有与“新”哈希语法等效的Ruby Hash#to_s方法?

7

Hash#to_s 是 inspect 方法的别名,总是以1.8 hash格式输出数据:

{key: "value"}.to_s
=> "{:key=>\"value\"}"

有没有一种核心方法可以将其序列化为1.9哈希风格?
{key: "value"}.to_s
=> "{key: \"value\"}"

我正在使用这个工具来重构已知数据的代码;由于Ruby通常拥有一切实现,所以我希望我只是在错的地方寻找。
当然,你可以用丑陋的方式进行hack。
"{" + my_hash.to_a.map{|pair| pair[0].to_s + ": " + pair[1].inspect} * ",\n") + "}"

但我希望有一个经过单元测试且完全正确的核心方法。


3
1.9“风格”是语法糖,仅在键是Symbol(并非所有符号都受支持,而是具有特定字符的子集)时才有效。由于这种限制,我不确定是否会有任何核心方法生成它。 - Neil Slater
正确;在那种情况下,我会期望出现异常。 - Lilith River
2个回答

5

这对我有用...而且它尊重字符串键。

{key: "value"}.to_s.gsub(/(:(\w+)\s?=>\s?)/, "\\2: ")

2
require 'json'
{key: "value"}.to_json

=> "{\"key\":\"value\"}" 

2
接近了,但不是我要找的。我要找的是 {key: "value"},而不是 {"key":"value"} - Lilith River

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接