Comment dois-je faire de comparaison de Chaîne en Ruby?
J'utilise le code suivant pour comparer les cordes, mais il prend toujours moi à la else
. Pourquoi?
print("Enter your state abbreviation: ")
state_abbreviation = gets
if state_abbreviation.upcase == "NC"
puts("North Carolina")
elsif state_abbreviation.upcase == "SC"
puts("Sourth Carolina")
elsif state_abbreviation.upcase == "GA"
puts("Georgia")
elsif state_abbreviation.upcase == "FL"
puts("Florida")
elsif state_abbreviation.upcase == "AL"
puts("Alabama")
else
puts("You have enter wrong abbreviation")
end
J'ai aussi essayé .eql?("string")
mais j'obtiens le même résultat.
Je ne sais vraiment pas Ruby très bien, mais pourquoi cette difficile et fragile, si-si-si-autre structure? Utiliser une HashMap et, si vous n'obtenez rien en retour, de définir le message d'erreur. Cela permettrait également d'aider les newline problème tout le monde sortit ci-dessous.
1. Je suis très nouveau à ruby donc même ne sais pas si HashMP sortie? 2. Je n'aime pas lorsqu'!
1. Je suis très nouveau à ruby donc même ne sais pas si HashMP sortie? 2. Je n'aime pas lorsqu'!
OriginalL'auteur itsaboutcode | 2010-01-06
Vous devez vous connecter pour publier un commentaire.
La chaîne de caractères retournée par obtient aura un saut de ligne à la fin. Utilisation
String#chomp
pour l'enlever (c'est à direstate_abbreviation = gets.chomp
).PS: Ton code aurait l'air beaucoup plus propre (à mon humble avis), si vous avez utilisé lorsqu'au lieu de if-else-elsif.
case
suggestion. 100% d'accord!chomp chose avait fait de moi un fou....merci pour la réponse..Vous êtes le vrai MVP.
OriginalL'auteur sepp2k
Je n'ai pas assez de points pour le commentaire, mais je pense que l'idée de hachage par Chris Bouffon-Jeunes est vraiment soignée.
ce code est beaucoup plus concis et clair qu'un tas de elsif et plus courte que d'un cas. Il permet aussi un hachage de l'état des objets, où la clé est l'abréviation et la valeur de l'objet.
En fait, je peux utiliser un tableau, avec un
in_array?(state)
ou quelque chose du genre. À moins de hachage a sa propre syntaxe comme ça.statehash[state_abbreviation] renvoie une valeur, donc dans mon exemple RI ou NC travail, d'autre nil est retourné. Hachages .has_key?, .has_value? mais je ne vois pas la nécessité de l'utiliser ici.
OriginalL'auteur Beanish
Avant le gros bloc, dire:
Comme une alternative à sepp2k excellente suggestion pour l'utilisation
case
, pensez à faire un hash avec l'état des abréviations clés.OriginalL'auteur Chris Jester-Young
gets
renvoie ce que vous avez tapé avec un saut de ligne. Essayezstate_abbreviation = gets.chomp
OriginalL'auteur Brian Young
Vous utilisez, et probablement votre shell/d'entrée est l'ajout d'un saut de ligne (\n) de caractère à la fin de la chaîne, et peut-être vous pouvez utiliser l'instruction de cas:
exemple:
OriginalL'auteur makevoid
Alors que nous sommes hors sujet et à propos de l'approche contre le problème, consultez cet rails en fonte. Il tire dans tous les abréviations d'état à partir d'un site web. Je suis un fan de ce parce qu'il obtient les mappages de votre code entièrement (mais pourrait être une bonne idée pour sauver le site, juste au cas où). Vous pouvez ensuite les réunir avec un cache pour éviter réellement frapper à la DB.
http://railscasts.com/episodes/179-seed-data
http://railscasts.com/episodes/115-caching-in-rails-2-1
OriginalL'auteur John Hinnegan