Ruby表达式评估:空白很重要?

时间:2012-01-19 10:39:59

标签: ruby-on-rails ruby

想象一下它是1月19日。如果你今天看这个问题,这并不难。

Date.today
 => Thu, 19 Jan 2012    # as expected

Date.today + 1
 => Fri, 20 Jan 2012    # as expected

Date.today+1
 => Fri, 20 Jan 2012    # as expected

Date.today +1
 => Thu, 19 Jan 2012    # ?!

我在这里缺少什么?

2 个答案:

答案 0 :(得分:17)

区别在于:

Date.today + 1 

是两个数值的加法和

Date.today +1 

调用方法today,参数sg(日历改革日),其值为+1

检查此问题的最佳方法是使用包含调试输出的原始方法进行修补。请参阅此脚本作为示例:

require 'date'

class Date

  def self.today(sg=ITALY)
     puts "ITALY default("+sg.to_s+")" if sg==ITALY
     puts sg unless sg==ITALY
     jd = civil_to_jd(*(Time.now.to_a[3..5].reverse << sg))
     new0(jd_to_ajd(jd, 0, 0), 0, sg)
  end

end

puts "- Addition:"
Date.today + 1
puts "- Parameter:"
Date.today +1

这将打印以下控制台输出:

- Addition:
ITALY default(2299161)
- Parameter:
1

答案 1 :(得分:4)

是的,空白中在Ruby中很重要,这与普遍看法相反。例如,foo barfoobar不同。

在这种特殊情况下,

Date.today + 1

相同
Date.today().+(1)

尽管

Date.today +1

相同
Date.today(+1)

相同
Date.today(1.+@())