我正在学习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 }
答案 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 }
这应该可以解决您的问题。