L'obtention d'un caractère ASCII code en Ruby à l'aide de `?` (point d'interrogation) échoue
Je suis dans une situation où j'ai besoin de la valeur ASCII d'un caractère (par Projet d'Euler à la question n ° 22, si vous voulez obtenir spécifique) et je suis en cours d'exécution dans un problème.
Étant nouveau pour ruby, je l'ai googlé et trouvé que ?
était la voie à suivre: ?A
ou quoi que ce soit. Mais quand je l'intégrer dans mon code, le résultat de cette instruction est la chaîne "A"
—pas de code de caractère. Même problème avec les [0]
et slice(0)
, qui, en théorie, doit retourner le code ASCII.
La seule chose que je peux penser, c'est que c'est une version de ruby question. Je suis en utilisant 1.9.1-p0, après avoir mis à niveau à partir 1.8.6 cet après-midi. J'ai triché un peu en cours à partir d'une version de Ruby, dans le même répertoire, j'ai pensé que je l'ai probablement déjà eu les fichiers qui ne sont pas livrés avec le .fichier zip, donc je n'ai pas les télécharger.
Alors, pourquoi sont tous mes codes ASCII en caractères?
Vous devez vous connecter pour publier un commentaire.
Ruby avant 1.9 traités personnages quelque peu inégale.
?a
et"a"[0]
serait retourner un entier représentant la valeur de ASCII du caractère (ce qui n'était généralement pas le comportement des gens étaient à la recherche d'), mais dans la pratique, l'utilisation des caractères normalement être représenté par une chaîne de caractères. En Ruby 1.9, les personnages ne sont jamais mystérieusement transformée en nombres entiers. Si vous souhaitez obtenir un caractère ASCII de la valeur, vous pouvez utiliser leord
méthode, comme?a.ord
(qui renvoie 97).?a.ord
donne 97, alors qu'il suffit de la rédactiona.ord
recherche une variable ou une méthode appeléea
et va jeter un NameError si il n'y a pas quelque chose avec ce nom ou un NoMethodError si la variablea
ne contient pas de chaîne.Comment sur
pour 1.8/1.9 portabilité.
1,8 et 1,9
ou
>> "a".class == String ? "a".ord : "a"[0]
produit des erreursNoMethodError: undefined method `ord' for "a":String from (irb):3
Trouvé la solution. "string".ord retourne le code ascii du s.
Ressemble les méthodes que j'avais trouvé sont cassés dans le 1,9 série de ruby.
Programmation Ruby/ASCII
Dans la précédente version de ruby avant 1.9, vous pouvez utiliser le point d'interrogation de la syntaxe.
Après 1,9, nous utilisons l'ord à la place.
Si vous lisez la question 22 du projet Euler encore une fois, vous constaterez que vous vous n'êtes pas à la recherche pour les valeurs ASCII des caractères. Ce que la question est à la recherche d', pour le caractère "A" est par exemple de 1, sa position dans l'alphabet, où en tant que "A" a une valeur ASCII de 65 ans.