Arrays 未定义的方法';到uh';关于Ruby数组

Arrays 未定义的方法';到uh';关于Ruby数组,arrays,ruby,hash,ruby-2.0,Arrays,Ruby,Hash,Ruby 2.0,根据,有一种方法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

根据,有一种方法
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 `<main>'
irb(main):002:0>

我想用这项技术来回答关于Stackoverflow的另一个问题,但我现在被卡住了,因为Ruby的一个文档化功能对我不起作用。

to_h方法仅在Ruby 2.1或更高版本中可用

请查看此处的发行说明


Ruby 2.0不支持to_h方法。它在2.1和更高版本中提供

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

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

如果
to_h
尚未定义,即在2.1版本之前的ruby环境中,则以下代码将使用@engineersmnky注释中给出的代码对修补程序数组进行monkey,并提供
to_h
方法

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

谢谢将升级我的Ruby:-)注意,您仍然可以使用兼容的
Hash::[]
语法,如
Hash[[[:foo,:bar],[1,2]]]
在Ruby<2中生成相同的结果。1@engineersmnky听起来棒极了!您应该至少升级到v2.1。2.0出现了一些问题(例如,
改进
)。@CarySwoveland肯定会注意到,在Ruby 2.1.0
to_h
文档中,
[:foo,:bar],[1,2]]。to_h
应该导致
{:foo=>:bar,1=>2}
unless [].respond_to? :to_h
  class Array
    def to_h
      Hash[self]
    end
  end
end