Je suis dans une situation où j'ai besoin de la valeur ASCII d'un caractère (pour question n ° 22 de Project Euler , si vous voulez être précis) et je suis rencontrer un problème.
Étant nouveau sur Ruby, je l'ai recherché sur Google et j'ai découvert que ?
Était la voie à suivre: ?A
Ou autre chose. Mais lorsque je l'intègre dans mon code, le résultat de cette déclaration est la chaîne "A"
- pas de code de caractère. Même problème avec [0]
Et slice(0)
, qui devraient tous deux théoriquement renvoyer le code ASCII.
La seule chose à laquelle je peux penser, c'est qu'il s'agit d'un problème de version Ruby. J'utilise 1.9.1-p0, après avoir mis à jour le 1.8.6 cet après-midi. J'ai triché un peu en passant de une version de travail de Ruby, dans le même répertoire, j'ai pensé que j'avais probablement déjà les fichiers qui ne sont pas fournis avec le fichier .Zip, donc je ne les ai pas téléchargés.
Alors pourquoi exactement tous mes codes ASCII sont-ils transformés en caractères réels?
Ruby avant 1.9 traitait les personnages de manière quelque peu incohérente. ?a
et "a"[0]
retournerait un entier représentant la valeur ASCII valeur (qui n'était généralement pas le comportement recherché), mais dans la pratique, les caractères seraient normalement représentés par une chaîne d'un caractère. Dans Ruby 1.9, les caractères ne sont jamais mystérieusement transformés en nombres entiers. Si vous souhaitez obtenir la valeur ASCII ASCII d'un caractère, vous pouvez utiliser la méthode ord
, comme ?a.ord
(qui renvoie 97).
Que diriez-vous
"a"[0].ord
pour une portabilité 1.8/1.9.
Pour 1.8 et 1.9
?a.class == String ? ?a.ord : ?a
ou
"a".class == String ? "a".ord : "a"[0]
J'ai trouvé la solution. "string" .ord renvoie le code ascii de s. On dirait que les méthodes que j'avais trouvées sont cassées dans la série 1.9 de Ruby.
Dans la précédente Ruby version antérieure à 1.9, vous pouvez utiliser la syntaxe de point d'interrogation.
?a
Après 1.9, nous utilisons plutôt ord.
'a'.ord