问题
As per Ruby Array documentation, there is a method to_h
which can be used to convert arrays to hash as long as each element of the array is another array of two elements. Example below from the same documentation
p [[:foo, :bar], [1, 2]].to_h
However, when I run the above code, I get this error:
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>
My Ruby version is
C:\>ruby -v
ruby 2.0.0p247 (2013-06-27) [x64-mingw32]
I wanted to use this technique to answer another question on Stackoverflow, but I am stuck now as a documented feature of Ruby is not working for me.
回答1:
The to_h
method is only available in Ruby version 2.1 or higher.
Check the release notes here
http://pivotallabs.com/ruby-2-1-0-changes-of-note/
回答2:
Yes, it's not supported for lower version than Ruby 2.1, If you are looking for alternative. Try this
keys = [:foo, :bar]
vals = [1, 2]
Hash[*keys.zip(vals).flatten]
=> {:foo=>1, :bar=>2}
回答3:
The following code will monkey patch Array and provide a to_h
method using the code give in @engineersmnky's comment, if to_h
isn't already defined - that is, in pre-2.1 ruby environments.
unless [].respond_to? :to_h
class Array
def to_h
Hash[self]
end
end
end
回答4:
Ruby 2.0 doesn't support to_h method. its available in 2.1 and higher
来源:https://stackoverflow.com/questions/31683993/undefined-method-to-h-on-ruby-array