Почему разница в поведении парсеров YAML (syck и psych)? - PullRequest
4 голосов
/ 06 января 2012

Посмотрите на этот случай:

ruby ​​1.9.2p0 (редакция 2010-08-18 29036) [i686-linux]

irb(main):006:0> YAML::ENGINE.yamler = "psych"
=> "psych"

irb(main):007:0> '8902-20-13'.to_yaml
ArgumentError: invalid date
from /usr/local/lib/ruby/1.9.1/date.rb:1022:in `new_by_frags'
from /usr/local/lib/ruby/1.9.1/date.rb:1046:in `strptime'
from /usr/local/lib/ruby/1.9.1/psych/scalar_scanner.rb:45:in `tokenize'
from /usr/local/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:191:in `visit_String'
from /usr/local/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:63:in `accept'
from /usr/local/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:36:in `<<'
from /usr/local/lib/ruby/1.9.1/psych.rb:165:in `dump'
from /usr/local/lib/ruby/1.9.1/psych/core_ext.rb:13:in `psych_to_yaml'

irb(main):008:0> YAML::ENGINE.yamler = "syck"
=> "syck"

irb(main):009:0> '8902-20-13'.to_yaml
=> "--- \"8902-20-13\"\n"

Когда я использую парсер psyМне нужно отформатировать строку, которая немного напоминает дату, она выдает исключение, потому что он думает, что это строка даты.При использовании syck эта проблема не возникает.

У кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Psych в значительной степени не зависит от Syck, и я не думаю, что авторы Psych заинтересованы в том, чтобы быть совместимым с ошибками с Syck.Я думаю, что они в любом случае реализуют разные версии спецификации YAML.

Один обходной путь должен заключаться в том, чтобы поместить строки вокруг чисел типа даты.

0 голосов
/ 09 января 2012

Как уже упоминал @matt, ответ на этот запрос: https://github.com/ruby/ruby/commit/9f688d53c2b5af5960d1e8d8fb09b26aa9d8b5f9

...