日期增量问题

时间:2009-10-22 15:14:54

标签: ruby

-> irb
>> (Date.today +3).to_s
=> "2009-10-22"
>> (Date.today + 3).to_s
=> "2009-10-25"

在“+3”和“+ 3”之间,有区别吗?

3 个答案:

答案 0 :(得分:4)

没有空格的“+ 3”表示正3,它作为参数传递给today方法,而“+ 3”表示加3,因此今日方法的返回值加到3。

如果您感到好奇,请使用今日方法"specifies the Day of Calendar Reform"的可选参数,以便转换为其他日期格式。

答案 1 :(得分:1)

我意识到这一定是令人沮丧的错误。当使用方法调用具有可选括号的语言时,空格是一个微妙的问题。请考虑以下事项:

square(2+2)*2   # square(4)*2 = 16*2 = 32
square (2+2)*2  # square(4*2) = square(8) = 64

你的情况比较棘手,因为没有空格的+3实际上是一元运算符。 ! 〜和+一元运算符具有最高优先级

同样有趣的是 - 一元运算符的优先级低于取幂运算符。为此

-4**2  # -(4**2) = -16

答案 2 :(得分:0)

在我看来,+在第一种情况下与3绑定。那就是翻译看到Date.today(+3)。如果在加号之后有空格,则翻译会看到(Date.today) + (3)

使用+来表示正数不是很常见,因为数字开头是正数,但考虑负数的情况:更容易看出Date.today -3意味着除Date.today - 3之外的其他内容。