为什么我得到这个ruby的each_key方法错误

时间:2015-02-27 18:48:18

标签: ruby dictionary hash

这是我的方法

def dict(hash = {})
  hash.each_key do |key|
    if(hash[key] == nil)
      p nil
    else
      p hash[key]
    end
  end
end

我试图接受这些参数作为参数 dict(' fish' =>'水生动物') 要么 字典('鱼) 但我一直收到这个错误

practice:36:in `dict': undefined method `each_key' for "fish":String (NoMethodError)                                                                                                          
        from practice:45:in `<main>'

我比较新,所以我不明白我是如何使用这个错误请帮助

1 个答案:

答案 0 :(得分:2)

当您使用dict('fish')调用方法时,hash参数将设置为字符串'fish'。 Ruby字符串类没有名为each_key的方法,因此您得到no方法错误。

Ruby字符串API: http://ruby-doc.org//core-2.2.0/String.html

由于您需要同时接受字符串和哈希参数,因此您必须检查方法中的参数类。

def dict(word)
  case word
  when String
    # do what should be done for 'fish'
  when Hash
    # do what should be done for 'fish' => 'aquatic animal'
  end
end

有关case语句中类匹配如何工作的解释,请参阅this article