2011-02-13 79 views
0

我收到以下错误:获得一个“类型错误”当遍历,一个Ruby阵列

Can't convert String into 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 

回答

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

迈克尔得到了它的权利...当你运行该代码

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

你:

rhino 
giraffe 
cat 
dolphin 
turtle 

所以“我”并不是指你期望它指的是什么......