Ruby数组上未定义的方法’to_h’

根据Ruby Array文档 ,只要数组的每个元素是另外两个元素的数组,就有一个方法to_h可用于将数组转换为哈希。 以下示例来自相同的文档

 p [[:foo, :bar], [1, 2]].to_h 

但是,当我运行上面的代码时,我收到此错误:

 irb(main):001:0> p [[:foo, :bar], [1, 2]].to_h NoMethodError: undefined method `to_h' for [[:foo, :bar], [1, 2]]:Array from (irb):1 from E:/RubyInstall/bin/irb:12:in `' irb(main):002:0> 

我的Ruby版本是

 C:\>ruby -v ruby 2.0.0p247 (2013-06-27) [x64-mingw32] 

我想使用这种技术来回答Stackoverflow上的另一个问题,但是现在我被困住了,因为Ruby的文档function对我不起作用。

to_h方法仅适用于Ruby 2.1或更高版本。

请查看此处的发行说明

http://pivotallabs.com/ruby-2-1-0-changes-of-note/

是的,它不支持低于Ruby 2.1的版本,如果你正在寻找替代品。 试试这个

 keys = [:foo, :bar] vals = [1, 2] Hash[*keys.zip(vals).flatten] => {:foo=>1, :bar=>2} 

如果to_h尚未定义 – 即在2.1之前的ruby环境中,下面的代码将使用@ engineermnky的注释中的代码提供补丁数组并提供to_h方法。

 unless [].respond_to? :to_h class Array def to_h Hash[self] end end end 

Ruby 2.0不支持to_h方法。 它有2.1和更高版本