Подтвердить что ты не робот

Array TypeError: не может преобразовать Fixnum в String

Я экспериментирую с массивами и читаю книгу Стивена Хольцнера "Начало Ruby on Rails". Я сделал программу:

array = ['Hello', 'there', 1, 2]
puts array[1]
puts array[3]
puts array.length
array2 = Array.new
puts array2.length
array2[0] = "Banana"
array2[1] = 6
puts array2[0] + " " + array2[1]
puts array3.length

Это не много, но когда я запускаю его, я получаю сообщение об ошибке

arrays.rb:9:in `+': can't convert Fixnum into String (TypeError)
    from arrays.rb:9

Почему я получаю эту ошибку?

4b9b3361

Ответ 1

Вы не можете добавить строку и целое число (Fixnum), в этом случае вы попытались добавить 6 к "Банану".

Если в строке 9 вы сделали это:

puts array2[0] + " " + array2[1].to_s

Вы получите:

"Banana 6"

Ответ 2

array2[1] является 6, что является Fixnum. Он не знает, как добавить себя к строке (что в данном случае равно Banana). Если вы должны были преобразовать ее в строку, она будет работать нормально.

puts array2[0] + " " + array2[1].to_s

Ответ 3

Ошибка в основном говорит о том, что вы не можете преобразовать array2[1] (значение это число, тип Fixnum в этом случае) в тип String. То, как вы будете работать, это преобразовать тип в строку (это для строки 9, где возникает ошибка):

puts array2[0] + " " + array2[1].to_s

Массив2 [1]. to_s преобразует число в тип String.

Ответ 4

Не пробовал это сам, но попробуйте заменить

puts array2[0] + " " + array2[1]

с

puts array2[0] + " " + array2[1].to_s

Ответ 5

Вот способ преобразования выражения FixNum в строку,

x=2
print (x+20).to_s + "\sbanannas"

Не знал, что вы можете использовать метод FixnNum # to_s для этих парнеров.

Ответ 6

вы пытаетесь добавить целое число (fixnum) и строку, которую вы не можете сделать для ruby, если вы явно не применяете целое число (fixnum) к строке. в вашем коде array2[0] содержит строковое значение "banannas", а array2[1] содержит значение integer (fixnum) 1. поэтому для правильного запуска вашего кода вам также нужно добавить значение в array2 [1] к строковому значению,

вы можете изменить свой код в строке 9:

puts array2[0] + " " + array2[1]._s