use*_*262 11 ruby datetime ruby-on-rails
使用rails控制台,我得到了一点:
假设今天是12月11日.
Date.today-1.day # December 10 (no spaces)
Date.today - 1.day # December 10 (a space on both sides of the minus sign)
Date.today -1.day # December 11 whaaaat?
Date.today -5.days # Still december 11!
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?我有点担心代码中容易错过这个问题.关于如何编码的任何其他建议?
Hol*_*ust 13
您看到的差异是由ruby解析代码的方式引起的.在您的情况下,您偶然发现了语法上的细微差别,这会大大改变代码的评估方式.
前两个示例实际上是涉及对象操作的表达式.从而
Date.today-1.day
Date.today - 1.day
Run Code Online (Sandbox Code Playgroud)
都等同于
Date.today.send(:-, 1.day)
# a "fancy" way to write
Date.today - 1.day
Run Code Online (Sandbox Code Playgroud)
你的第二个例子
Date.today -1.day
Date.today -5.days
Run Code Online (Sandbox Code Playgroud)
实际上是对Date.today方法的直接方法调用,因此相当于
Date.today( (-1).day )
Run Code Online (Sandbox Code Playgroud)
这是因为减号被解释为1的前缀(因此被解析为数字-1).由于ruby的两个属性,这种解释是可能的,并且不会引发任何错误:
Date.today 接受表示所用日历的可选参数您收到的实际结果取决于您的环境,因为Rails似乎在这里覆盖了一些Date方法.在简单的Ruby中,你会得到不同的日期,但它仍然可以工作.