Ruby - Time.now.to_date.next_month.begin会给出错误而不是下个月的第一个错误

时间:2012-06-29 17:22:01

标签: ruby datetime date time

当我使用时:

require 'date'
Time.now.to_date.next_month

它返回

 => #<Date: 2012-07-29 ((2456138j,0s,0n),+0s,2299161j)>

如果我尝试Time.now.to_date.next_month.的标签完成,我会看到:

1.9.3p194 :081 > Time.now.to_date.next_month.be
Time.now.to_date.next_month.begin     Time.now.to_date.next_month.between?

但是如果我尝试Time.now.to_date.next_month.begin我就会

1.9.3p194 :081 > Time.now.to_date.next_month.begin
NoMethodError: undefined method `begin' for #<Date: 2012-07-29 ((...

为什么?

2 个答案:

答案 0 :(得分:1)

这是因为您正在实例化并在同一行中询问建议。

Time.now.to_date.next_month.be<tab> #=> contains "begin"

t = Time.now.to_date.next_month
t.be<tab> #=> Does not contain "begin"

由于Ruby解释器没有处理表达式,因此它不知道它正在处理什么类的类,因此当你<tab>时,它只是给你一切。

答案 1 :(得分:0)

这是因为函数重载。如果您有任何疑虑,请先查看API参考,然后提出问题。

由于日期中没有此类功能,因此不会返回下个月的第一个日期。在所有对象上定义了总共719个函数,尝试按任意按钮,开始和之间恰好是这样的函数。

“IRB auto_complete确保函数符合您的要求”的核心假设完全被误导和错误。