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

Kev*_*vis 18 ruby ruby-on-rails

想象一下,这是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    # ?!
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

fyr*_*fyr 17

不同之处在于:

Date.today + 1 
Run Code Online (Sandbox Code Playgroud)

是两个数值的加法和

Date.today +1 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

- Addition:
ITALY default(2299161)
- Parameter:
1
Run Code Online (Sandbox Code Playgroud)