Ответ 1
Вы не можете добавить строку и целое число (Fixnum
), в этом случае вы попытались добавить 6 к "Банану".
Если в строке 9 вы сделали это:
puts array2[0] + " " + array2[1].to_s
Вы получите:
"Banana 6"
Я экспериментирую с массивами и читаю книгу Стивена Хольцнера "Начало 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
Почему я получаю эту ошибку?
Вы не можете добавить строку и целое число (Fixnum
), в этом случае вы попытались добавить 6 к "Банану".
Если в строке 9 вы сделали это:
puts array2[0] + " " + array2[1].to_s
Вы получите:
"Banana 6"
array2[1]
является 6
, что является Fixnum. Он не знает, как добавить себя к строке (что в данном случае равно Banana
). Если вы должны были преобразовать ее в строку, она будет работать нормально.
puts array2[0] + " " + array2[1].to_s
Ошибка в основном говорит о том, что вы не можете преобразовать array2[1]
(значение это число, тип Fixnum в этом случае) в тип String. То, как вы будете работать, это преобразовать тип в строку (это для строки 9, где возникает ошибка):
puts array2[0] + " " + array2[1].to_s
Массив2 [1]. to_s преобразует число в тип String.
Не пробовал это сам, но попробуйте заменить
puts array2[0] + " " + array2[1]
с
puts array2[0] + " " + array2[1].to_s
Вот способ преобразования выражения FixNum в строку,
x=2
print (x+20).to_s + "\sbanannas"
Не знал, что вы можете использовать метод FixnNum # to_s для этих парнеров.
вы пытаетесь добавить целое число (fixnum) и строку, которую вы не можете сделать для ruby, если вы явно не применяете целое число (fixnum) к строке. в вашем коде array2[0]
содержит строковое значение "banannas", а array2[1]
содержит значение integer (fixnum) 1. поэтому для правильного запуска вашего кода вам также нужно добавить значение в array2 [1] к строковому значению,
вы можете изменить свой код в строке 9:
puts array2[0] + " " + array2[1]._s