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, если он находится в массиве