Hash.assoc未定义方法'assoc'

时间:2011-06-10 23:34:51

标签: ruby

当我打开IRB并粘贴

h = {"colors"  => ["red", "blue", "green"],
        "letters" => ["a", "b", "c" ]}
h.assoc("letters")  #=> ["letters", ["a", "b", "c"]]
h.assoc("foo")      #=> nil

进入它我总是收到消息:

NoMethodError: undefined method `assoc' for {"letters"=>["a", "b", "c"], "colors"=>["red", "blue", "green"]}:Hash
from (irb):3
from :0

虽然此代码取自http://ruby-doc.org/core/classes/Hash.html#M000760 我做错了什么?

1 个答案:

答案 0 :(得分:4)

Hash#assoc是一个Ruby 1.9方法,在Ruby 1.8(您可能正在使用)中不可用。

如果你想要相同的结果,你可以做到

["letters", h["letters"]]
# => ["letters", ["a", "b", "c"]]

你也可以在Ruby 1.8中修补类似的行为:

class Hash
  def assoc(key_to_find)
    if key?(key_to_find)
      [key_to_find, self[key_to_find]]
    else
      nil
    end
  end
end