Я полагаю, что Евгений прав в отношении причины этой проблемы - кажется, что парсер по-разному обрабатывает строки, содержащие действительные восьмеричные числа.
Если вам это не нравится, вы можете переключиться на другой анализатор YAML. Согласно документам доступно два парсера: 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
.