Получение «ошибки типа» при итерации по массиву Ruby - PullRequest
0 голосов
/ 13 февраля 2011

Я получаю следующую ошибку:

Не удается преобразовать строку в целое число (ошибка типа)

Это происходит в этой строке:

if new_animal != animals[i]

Почему это происходит?

animals = ['rhino', 'giraffe', 'cat', 'dolphin', 'turtle']

puts 'Enter the new animal:'
new_animal = gets.chomp

empty_array = []

animals.each do |i|
  if new_animal != animals[i]
    empty_array << i
  end
end

Ответы [ 2 ]

5 голосов
/ 13 февраля 2011

animals.each do |i| не делает то, что вы думаете, что делает.i тогда это фактические строки (имена животных).Поэтому, если вы выполняете итерацию и используете имя животного в качестве средства доступа к массиву в animals[i], оно не является целым числом и не может быть преобразовано в единицу.

animals.each do |animal|
    empty_array << animal if new_animal != animal
end

- правильный способ сделать это.

В Ruby, если вам нужно целое число итераторов, вы можете сделать each_index, и это даст вам целочисленную позицию.each_index не слишком часто используется в Ruby, поэтому я реорганизовал ваш код в соответствии с тем, что я написал.

Или вы можете просто сделать его одной строкой кода и сделать:

animals.index(new_animal) 

, который вернет nil, если он не находится в массиве, или позицию fixnum, если он находится в массиве

1 голос
/ 13 февраля 2011

Майкл правильно понял ... когда вы запускаете этот код

animals = ['rhino', 'giraffe', 'cat', 'dolphin', 'turtle']
animals.each {|i| puts i}

вы получите:

rhino
giraffe
cat
dolphin
turtle

так что «я» не относится к тому, что вы ожидаете, что это относится к ...

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