Accueil - Forum - Bibliothèque de ressources
____

Comprendre les erreurs.



On retrouve souvent des erreurs dans le Ruby mais on ne comprends pas trop sa signification. Hé bien, ce chapitre est là pour cela.

Voici un simple code en Ruby : 

Code Rubyputs '5' + 5

Et voici le message d'erreur :

#<TypeError: cannot convert Fixnum into String>

Fixnum est un entier et String une chaîne de caractère. Le problème est que vous ne pouvez pas additionner une chaîne de caractère et un nombre.

Si vous voulez afficher "55", il faudra additionner deux chaînes de caractères :

Code Rubyputs '5' + '5'

Sur cette exemple, ça a l'air stupide mais voici un autre exemple :

Code Ruby
nombre = gets.chomp
puts '5' + nombre

Et oui ... si l'utilisateur met un nombre, on aura le fameux problème ... et si vous mettez des parenthèses autour de "nombre" comme pour le chiffre 5 dans l'exemple ci-dessus, Ruby va interpréter "nombre" comme une chaîne de caractère et non comme une variable.

La solution est tout simplement de convertir la variable "nombre" en chaîne de caractère avec ".to_s"

Code Ruby
nombre = gets.chomp
puts '5' + nombre.to_s

Voici la source d'une autre erreur :


Code Rubydef heros(nom)
        puts 'Le héros se nomme ' + nom
end

heros
Message d'erreur :

#<ArgumentError: wrong number of arguments (0 for 1)>

Quel est le problème ? Normalement ça devrait vous sauter aux yeux ...
Tout d'abord, il y a une méthode "heros" avec un paramètre "nom". Dedans, on a une instruction ... ensuite, en dehors de la méthode, on appelle la méthode "heros" mais ... sans le paramètre ! Ruby ne va rien comprendre et vous met un petit message :)

Voici la correction du code :

Code Rubydef heros(nom)
        puts 'Le héros se nomme ' + nom
end

heros('Link')

Voici un autre type d'erreur :

Code Rubydef heros
        nom = 'Link'
        puts 'Le héros se nomme ' + nom
end

heros
puts 'Il s'appelle ' + nom + ' le héros ?

L'erreur : 

#<NameError : undefined local variable 'nom'>

Si vous comprenez un peu l'anglais, vous aurez compris donc que le message d'erreur nous dit qu'on a pas défini la variable locale "nom". Ah bon ? et pourtant à la deuxième ligne : " nom = 'Link' ", on a bien défini la variable ???
Oui mais il y a une particularité ... si on défini une variable dans une méthode, elle pourra s'appliquer que dans cette méthode et pas à l'extérieur. Voilà pourquoi on dit que c'est une variable "locale".

La solution :

Code Rubydef heros(nom)
        puts 'Le héros se nomme ' + nom
end

nom = 'Link'
heros(nom)
puts 'Il s'appelle ' + nom + ' le héros ?
Informations
Page vue 3451 fois | Auteur : Samarium

RPG Creative version 5 - Libérez votre créativité ! ; Mai 2005 - Mai 2012
0.040s - Optimisé pour une résolution 1024*728 - Tous droits réservés.

Contact - Partenaires - Historique - A propos