Получение кода символа ASCII в Ruby с использованием `?` (Вопросительный знак) не удается
Я в ситуации, когда мне нужно значение ASCII символа (для Project Euler question # 22, если вы хотите получить), и я столкнулся с проблемой.
Будучи новым для рубинов, я искал его и обнаружил, что ?
- это путь: ?A
или что-то еще. Но когда я включаю его в свой код, результатом этого оператора является строка символа "A"
-no. Такая же проблема с [0]
и slice(0)
, оба из которых должны теоретически возвращать код ASCII.
Единственное, о чем я могу думать, это проблема с рубиновой версией. Я использую 1.9.1-p0, обновленный с 1.8.6 днем. Я немного изменил работу с рабочей версией Ruby, в том же каталоге, я полагал, что у меня, вероятно, уже есть файлы, которые не входят в комплект .zip файла, поэтому я не загружал их.
Итак, почему именно все мои коды ASCII превращаются в действительные символы?
Ответы
Ответ 1
Ruby до 1.9 обработанных символов несколько непоследовательно. ?a
и "a"[0]
возвращают целое число, представляющее значение символа ASCII (которое обычно не было тем, что искали люди), но в практическом использовании символы обычно представляются односимвольной строкой. В Ruby 1.9 персонажи никогда не таинственно превращаются в целые числа. Если вы хотите получить значение символа ASCII, вы можете использовать метод ord
, например ?a.ord
(который возвращает 97).
Ответ 2
Как насчет
"a"[0].ord
для переносимости 1.8/1.9.
Ответ 3
Для 1.8 и 1.9
?a.class == String ? ?a.ord : ?a
или
"a".class == String ? "a".ord : "a"[0]
Ответ 4
Нашел решение. "string".ord возвращает ascii-код s.
Похоже, что методы, которые я нашел, были разбиты на 1,9 серии рубинов.
Ответ 5
Ruby Programming/ASCII
В предыдущей версии ruby до 1.9 вы можете использовать синтаксис вопросительного знака.
?a
После 1.9 вместо этого мы используем ord.
'a'.ord
Ответ 6
Если вы снова прочитаете вопрос 22 из проекта Euler, вы обнаружите, что вы не ищете значения ASCII символов. Вопрос, который задает этот вопрос, для символа "A", например, равен 1, его положение в алфавите, где "A" имеет значение ASCII 65.