хэш ruby ​​неопределенный метод `key 'для main: Object (NoMethodError - PullRequest
0 голосов
/ 05 мая 2019

Я изучаю ruby, ошибка ниже в Ruby

myfile1.rb: 13: в блоке: неопределенный метод ключ для main: Object (NoMethodError)
из myfile1.rb: 13: в 'keep_if'
из myfile1.rb: 13: в ''

Код, написанный следующим образом:

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

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Давайте посмотрим на эту строку кода:

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': неопределенный метод 'key' для main: Object (NoMethodError)

Поставить "." за key подразумевается объект, вызывающий метод is_a?. Как это:

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

Это должно исправить вашу проблему.

2 голосов
/ 05 мая 2019

(отвечая на мой собственный вопрос согласно share your knowledge правилам по SO)

Проблема во 2-й строке / ниже кода:

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. в приведенном выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...