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

前端之家收集整理的这篇文章主要介绍了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”则提出异常).任何人都可以解释发生了什么的细节?

猜你在找的Ruby相关文章