使用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!
有人可以解释这里发生了什么吗?我有点担心代码中容易错过这个问题。关于如何编码的任何其他建议?
答案 0 :(得分:12)
您看到的差异是由ruby解析代码的方式引起的。在您的情况下,您偶然发现了语法细微差别,这会大大改变代码的评估方式。
前两个示例实际上是涉及对象操作的表达式。因此
Date.today-1.day
Date.today - 1.day
都等同于
Date.today.send(:-, 1.day)
# a "fancy" way to write
Date.today - 1.day
你的第二个例子
Date.today -1.day
Date.today -5.days
实际上是对Date.today
方法的直接方法调用,因此等同于
Date.today( (-1).day )
这是因为减号被解释为1的前缀(因此被解析为数字-1)。这种解释是可能的,并且由于ruby的两个属性而不会引起任何错误:
Date.today
接受表示日历使用的可选参数您收到的实际结果取决于您的环境,因为Rails似乎在这里覆盖了一些Date方法。在简单的Ruby中,你会得到不同的日期,但它仍然有用。
答案 1 :(得分:3)
如果在减号后面没有添加空格,ruby会将其作为今天函数的参数。此功能可以接收一个参数。见here
答案 2 :(得分:1)
您的问题有点语法问题。
这对我来说很好用
Date.today
# => Sun, 18 May 2014
Date.today() - 1.day
# => Sat, 17 May 2014
更漂亮的选择是
Date.yesterday
# => Sat, 17 May 2014
祝你好运!