puts "Please enter your age "
age=gets.chomp
age=age.to_i
if age >=18
division="in the adult "
elsif age >=12
division="in the junior "
elsif age >=5
division="in the novice "
else
puts "We are sorry, but you are ineligible to play in the league at this time."
end
puts "Congratulations! You are "+division+"league."
sleep 5
L'erreur que je reçois est la suivante:
We are sorry, but you are ineligible to play in the league at this time.
:18:in `+": can"t convert nil into String (TypeError)
:18:in `<main>"
Réponses:
1 pour la réponse № 1Vous recevez ce message parce que division
est nul. Si aucune de vos conditions n’est remplie, le message "Nous sommes désolés" est affiché, mais aucune valeur n’est attribuée à division
variable.
Vous pouvez vous en débarrasser en faisant:
puts "Congratulations! You are "+division+"league." unless division.nil?
1 pour la réponse № 2
C'est parce que vous n'êtes pas en train d'initialiser division
, et il est donc mis à nil.Initialize division comme ceci:
division = "in no"
Faites-le soit dans le bloc else, soit avant le premier if.
0 pour la réponse № 3
Juste pour montrer comment votre code peut ressembler davantage à Ruby:
print "Please enter your age: "
age = gets.chomp.to_i
division = case
when age >= 18
"adult"
when age >= 12
"junior"
when age >=5
"novice"
else
nil
end
if division
puts "Congratulations! You are in the #{ division } league."
else
puts "We are sorry, but you are ineligible to play in the league at this time."
end
Je suis sûr que ça pourrait être plus serré, mais c'est comme ça que je le ferais. En outre, parce que le code vérifie si division
est réglé, il ne retournera pas l’erreur que vous voyez.