Я считаю, что Евгений прав о причине этого вопроса - кажется, что синтаксический анализатор обрабатывает строки, содержащих действительные числа в восьмеричном по-разному.
Если вам не нравится, вы можете переключиться на другой парсер YAML. В соответствии с docs имеются два парса: Syck
и Psych
. Первая старая и неподдерживаемая, а вторая - ее замена.
Psych
Используется в последних версиях Rails и по умолчанию используется двигателем YAML в 1.9.3. Но вы можете легко использовать его в 1.9.2 и увидеть разницу:
require 'yaml'
p YAML::ENGINE.yamler # => "syck"
# or explicitly set YAML::ENGINE.yamler = "syck" in 1.9.3
p '01'.to_yaml # => "--- \"01\"\n"
p '08'.to_yaml # => "--- 08\n"
p YAML.load('01'.to_yaml) # => "01"
p YAML.load('08'.to_yaml) # => "08"
p YAML::ENGINE.yamler = "psych"
p '01'.to_yaml # => "--- '01'\n"
p '08'.to_yaml # => "--- '08'\n"
p YAML.load('01'.to_yaml) # => "01"
p YAML.load('08'.to_yaml) # => "08"
Как вы можете видеть, нет необходимости беспокоиться о разном представлении строк в Syck
до тех пор, как вы используете один и тот же двигатель на декодировать данные (в обоих случаях он возвращает исходные строки).
Если по какой-то причине вам нужно единое представление для строк в YAML вы можете переключиться на Psych
(он более последователен, по крайней мере, в данном случае), но будьте осторожны, как вы могли бы получить в неприятности, пытаясь загрузить с Psych
данные, которые были ранее сбрасывается с Syck
.
вот что мне нужно! благодаря! – agate
Не знал, что парсер YAML был изменен в 1.9.3, что хорошо знать. Спасибо за совет! – Eugene
Я запускаю 'ruby 1.9.3p194' на OS X (установлен через RVM), и даже если' YAML :: ENGINE.yamler' сообщает '' psych ''I_still_, вы получите вышеуказанное поведение с' '08'' и' «09''. –