2011-02-13 70 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 

所以「我」並不是指你期望它指的是什麼......