2012-01-06 64 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 2012-01-07 00:21:48

+0

我有一個類似的問題,看起來像一個浮動的東西被解析爲一個浮動,除非你把它放在字符串:http://stackoverflow.com/questions/8708113/is-it-safe-to-use-漂浮在yaml-hashes-with-ruby – 2012-01-08 23:06:19

+0

很酷@matt,謝謝! – 2012-01-09 16:06:17

回答

2

Psych很獨立於Syck,我不認爲Psych的作者有興趣與Syck合作bug-compatible。我認爲他們無論如何都實施了不同版本的YAML規範。

一種解決方法應該是在日期類數字周圍放置字符串。

相關問題