我收到以下错误:
无法将String转换为Integer(TypeError)
正是在这条线上发生:
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
答案 0 :(得分:5)
animals.each do |i|
没有按照您的想法行事。 i
然后是实际的字符串(动物名称)。因此,如果您在animals[i]
中迭代并使用动物名称作为数组访问器,则它不是整数,也不能转换为一个整数。
animals.each do |animal|
empty_array << animal if new_animal != animal
end
是正确的方法。
在Ruby中,如果你想要一个迭代器整数,你可以做each_index
,这将给你整数位置。但是,在Ruby中使用each_index
并没有太多使用,这就是我将代码重构为我发布的内容的原因。
或者你只需要编写一行代码即可:
animals.index(new_animal)
如果不在数组中则返回nil,如果在数组中则返回fixnum位置
答案 1 :(得分:1)
迈克尔做对了......当你运行这段代码时
animals = ['rhino', 'giraffe', 'cat', 'dolphin', 'turtle']
animals.each {|i| puts i}
你得到:
rhino
giraffe
cat
dolphin
turtle
所以“我”并不是指你所期望的......