加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么YAML解析器(syck和psych)的行为不同?

发布时间:2020-12-17 02:12:38 所属栏目:百科 来源:网络整理
导读:看看这个案例: 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_yamlArgumentError: invalid datefrom /usr/local/lib/ruby/1.9.1/date.rb:1022:in `new_by_frag
看看这个案例:

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"

当我使用心理解析器并且我需要格式化一个模糊地类似于日期的字符串时,它会引发异常,因为他认为这是一个日期字符串.使用syck不会发生此问题.

任何人都有任何想法?

解决方法

Psych几乎独立于Syck,我不认为Psych的作者有兴趣与Syck成为 bug-compatible.我认为他们无论如何都会实现不同版本的YAML规范.

一种解决方法应该是将字符串放在类似日期的数字上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读