J'expérimente avec des tableaux et je lis le livre "Beginning Ruby on Rails" de Steve Holzner. J'ai fait le programme:
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
Cela ne fait pas grand chose, mais quand je le lance, j'obtiens l'erreur
arrays.rb:9:in `+': can't convert Fixnum into String (TypeError)
from arrays.rb:9
Pourquoi ai-je cette erreur?
Vous ne pouvez pas ajouter une chaîne et un entier (Fixnum
). Dans ce cas, vous avez essayé d'ajouter 6 à "Banana".
Si vous avez fait ceci à la ligne 9:
puts array2[0] + " " + array2[1].to_s
Vous auriez:
"Banana 6"
array2[1]
est 6
, qui est un Fixnum. Il ne sait pas comment s'ajouter à une chaîne (qui dans ce cas est Banana
. Si vous deviez la convertir en chaîne, cela fonctionnerait parfaitement.
puts array2[0] + " " + array2[1].to_s
En gros, l’erreur indique que vous ne pouvez pas convertir array2[1]
(la valeur est un nombre, un type Fixnum dans ce cas) en un type String. Pour contourner ce problème, vous devez convertir le type en un String (c'est pour la ligne 9 où l'erreur se produit):
puts array2[0] + " " + array2[1].to_s
Le tableau array2 [1] . to_s convertit le nombre en un type String.
Je n'ai pas essayé moi-même, mais essayez de remplacer
puts array2[0] + " " + array2[1]
avec
puts array2[0] + " " + array2[1].to_s
vous essayez d'ajouter un entier (fixnum) et une chaîne, ce que vous ne pouvez pas faire sur Ruby à moins de convertir explicitement l'entier (fixnum) en chaîne. Dans votre code, array2[0]
contient une valeur de chaîne "bananes" et array2[1]
contient un entier (fixnum) 1. Ainsi, pour que votre code soit exécuté correctement, vous devez également convertir la valeur de array2 [1] en chaîne.
vous pouvez changer votre code à la ligne 9 en ceci:
puts array2[0] + " " + array2[1]._s
Voici un moyen de convertir une expression FixNum en chaîne,
x=2
print (x+20).to_s + "\sbanannas"
Je ne savais pas que vous pourriez utiliser la méthode FixnNum # to_s à ces parens.