2012-01-06 5 views
4

ルック:なぜYAMLパーサー(syckとpsych)の動作の違い?この場合の

ルビー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" 

それは日付文字列だと思うので、それは曖昧に日付に似ているが、例外をスローします。 syckを使用すると、この問題は発生しません。

誰でもご存知ですか?

+1

これはRubyの頭の中で最近扱われているように見える:https://github.com/ruby/ruby/commit/9f688d53c2b5af5960d1e8d8fb09b26aa9d8b5f9。 – matt

+0

私は同様の問題を抱えています。浮動小数点のようなものは、浮動小数点数として文字列を入れない限り、浮動小数点数として解析されます:http://stackoverflow.com/questions/8708113/is-it-safe-to-use-浮動小数点型のyaml-hashes-with-ruby –

+0

cool @matt、ありがとう! –

答えて

2

サイキックはサイクからかなり独立しており、私はサイクの著者がサイクとbug-compatibleであることに興味があるとは思わない。とにかくYAML仕様の異なるバージョンを実装していると思います。

回避策の1つは、日付のような数字の周りに文字列を置くことです。

関連する問題