当我运行ri Hash
时,stringify_keys
方法在某些列表中显示为实例方法,其中每个列表似乎与不同的gem或gem版本相关联。
但是当我尝试从irb shell调用它时,它失败了:
irb(main):035:0> h
=> {:this=>"this value", :that=>"that value"}
irb(main):031:0> h.instance_of? Hash
=> true
irb(main):032:0> h.stringify_keys
NoMethodError: undefined method `stringify_keys' for {:this=>"this value", :that=>"that value"}:Hash
from (irb):32
from /usr/local/bin/irb:12:in `<main>'
此外,当我在IRB中运行h.methods.sort
时,stringify_keys
未列为方法。
有人可以解释这种差异吗?这是我的环境过时还是我不了解Ruby文档的问题?
答案 0 :(得分:7)
Rails(通过ActiveSupport)将stringify_keys
方法修补为Hash
,因此您无法在普通的irb
会话中使用它。您可以通过以下方式加载核心扩展:
require 'active_support/core_ext'
有关加载单个猴子补丁的详细信息,请参阅Active Support Core Extensions Guide。