Ruby 数组上的未定义方法 'to_h'
Undefined method 'to_h' on Ruby array
根据Ruby Array documentation,有一种方法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>
我的Ruby版本是
C:\>ruby -v
ruby 2.0.0p247 (2013-06-27) [x64-mingw32]
我想使用这种技术来回答关于 Whosebug 的另一个问题,但我现在卡住了,因为 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
尚未定义 - 也就是说,在 pre-2.1 ruby 环境。
unless [].respond_to? :to_h
class Array
def to_h
Hash[self]
end
end
end
根据Ruby Array documentation,有一种方法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>
我的Ruby版本是
C:\>ruby -v
ruby 2.0.0p247 (2013-06-27) [x64-mingw32]
我想使用这种技术来回答关于 Whosebug 的另一个问题,但我现在卡住了,因为 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
尚未定义 - 也就是说,在 pre-2.1 ruby 环境。
unless [].respond_to? :to_h
class Array
def to_h
Hash[self]
end
end
end