Ruby 1.8.7将哈希转换为字符串。

12

我之前没有使用过 Ruby 1.8.7,最近我感到惊讶的是:

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

有没有现成的解决方案可以将Ruby 1.8.7中的哈希转换为字符串,使其看起来像:

{:k => 30}.to_s #=> "{:k=>30}"
1个回答

20

hash.to_s在Ruby版本从1.8.71.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)

别名:: inspect

您可以针对1.8.7中的Hash类进行monkey-patch以在本地执行相同操作,方法如下:

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}" 

我怎样才能从“inspect”函数的结果中获取哈希值? - Faizaan Gagan

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