通过Ruby数组迭代时获取'类型错误'

时间:2011-02-13 03:27:48

标签: ruby arrays iteration

我收到以下错误:

  

无法将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

2 个答案:

答案 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

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