web-dev-qa-db-fra.com

Array TypeError: impossible de convertir Fixnum en String

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?

27
Billjk

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"
51
JP Silvashy

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
4
Marc Talbot

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.

3
Kevin Jalbert

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
1
Chetter Hummin

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
0
Yoseph.B

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.

0
Aaron