/ / Je n'arrive pas à comprendre pourquoi je reçois une erreur “ne peux pas convertir nil en String” - ruby

Je n'arrive pas à comprendre pourquoi j'obtiens une erreur «Je ne peux pas convertir rien en String» - Ruby

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 № 1

Vous 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.