web-dev-qa-db-ja.com

Ruby配列の未定義のメソッド 'to_h'

Ruby Arrayのドキュメント のように、配列の各要素が2つの要素の別の配列である限り、配列をハッシュに変換するために使用できるメソッド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]

Stackoverflowに関する別の質問に答えるためにこの手法を使用したかったのですが、Rubyの文書化された機能が機能しないため、今は行き詰まっています。

13
Wand Maker

to_hメソッドは、Rubyバージョン2.1以降でのみ使用できます。

ここでリリースノートを確認してください

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

10

はい、Ruby 2.1よりも低いバージョンではサポートされていません。代替手段をお探しの場合は、こちらをお試しください

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

次のコードは、to_hがまだ定義されていない場合、つまり、2.1より前のRuby環境で、@ engineersmnkyのコメントに記載されているコードを使用して、配列にモンキーパッチを適用し、to_hメソッドを提供します。

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

Ruby2.0はto_hメソッドをサポートしていません。 2.1以降で利用可能

1
Vishnu Atrai