Другие ответы объяснил, что нужно сделать, чтобы исправить. Я намерен объяснить, ПОЧЕМУ вы получили эту ошибку.
Обратите внимание на код:
array = []
array << Square.new(4)
array << Square.new(10)
for i in array do
array[i].printArea
end
Вы создали пустой массив, а затем вставить две квадратные экземпляры в нем, не так ли?
Тогда, когда вы написали for i in array do
, как вы думаете, i
будет содержать? Конечно, i
будет содержать объекты в array
, то есть i
будет содержать экземпляры Square !!! Вы это говорите! i in array
говорит, что i
- это содержание позиций массива, а не его индекс.
Если вы пишете
for i in array do
p i.class
end
вы увидите что-то вроде
Square
Square
Случается, что рубин принимает только целое число в качестве индексов массива. Затем, когда вы упомянули array[i]
, вы были, по сути, что-то вроде array[Square]
, и Ruby пытался увидеть эти квадратные объекты целыми числами, чтобы использовать их в качестве индексов массива. И это, конечно, терпело неудачу, потому что есть no implicit conversion of Square into Integer
, и это ошибка, которую вы получили.
Я объясню немного больше об этом this article моего блога.
Вы также можете нажать два объекта в одной строке: 'array.push Square.new (4), Square.new (10) ' –