红宝石哈希为main:Object的未定义方法`key'(NoMethodError

时间:2019-05-05 02:22:37

标签: ruby hash

我正在学习ruby,在Ruby中出现以下错误

  
    

myfile1.rb:13:in'block in':main:Object的未定义方法'key'(       来自myfile1.rb:13:在“ keep_if”中
      来自myfile1.rb:13:in''

  

编写的代码如下:

hackerrank = Hash.new
hackerrank.keep_if { |key, value| key is_a? Integer }

2 个答案:

答案 0 :(得分:2)

(根据share your knowledge关于SO的规则回答我自己的问题)

问题出在第二行/下面的代码中:

hackerrank.keep_if { |key, value| key is_a? Integer }

is_a?方法应在key上调用,因此正确的用法是key.is_a?,因此修复方法如下:

hackerrank.keep_if { |key, value| key.is_a? Integer }

请注意,“。”像上面的key一样,在key.之后添加了(点)。

答案 1 :(得分:2)

让我们看一下这行代码:

hackerrank.keep_if { |key, value| key is_a? Integer }

此处将key视为方法的原因是因为在Ruby中调用方法时允许省略括号。

因此,上面的代码实际上解释如下:

hackerrank.keep_if { |key, value| key( is_a?( Integer) ) }

因此出现有关未定义方法“键”的错误消息:

  

myfile1.rb:13:in'block in':main:Object(NoMethodError)的未定义方法'key'

输入“。” key后面的内容表示正在调用方法is_a?的对象。像这样:

hackerrank.keep_if { |key, value| key.is_a? Integer }

这应该可以解决您的问题。