ruby – 为什么“23只狗”在2015年11月23日被解析为撬,但“3只狗”给出了解析器错误?

我在Twitter上找到了以下代码片段(查看源代码的帖子历史记录).
[5] pry(main)> Date.parse('3 Dogs')
ArgumentError: invalid date
[6] pry(main)> Date.parse('23 Dogs')
=> Mon,23 Nov 2015

这只是一个撬开的复活节彩蛋吗?如果是这样,为什么这个特定的日期和结果?如果它不是一个复活节彩蛋,为什么23只狗解析约会,但3只Dogsdoes不解析?

解决方法

这与Pry无关.如果您检查 Date::parse的文档,您将看到,“如果可选的第二个参数[comp]为真[认值]且检测到的年份在”00“到”99“的范围内,则将年份视为2位数形成并使它充满.“

这无疑是奇怪的.它检测到“23”在“00”……“30”范围内(但不是“3”或“0”中的任何一个“9”),因此它认为它是一个日期.请注意,范围“31”..“99”中的任何值都会引发异常.我预计“30”是该范围的高端,因为目前11月和11月是30天.然后它似乎丢弃该信息并使用当前年份和月份,并假设该日期为“23”(或者如果输入“31”则提出异常).任何人都可以解释发生了什么的细节?

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...