0

当我使用:

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 ((...

这是为什么?

4

2 回答 2

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>,它只是给你一切。

于 2012-06-29T18:34:40.650 回答
0

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

不返回下个月的第一个日期,因为 Date 中没有这个函数。在所有对象上总共定义了 719 个函数,尝试在任何对象上按 Tab 键并开始和之间恰好是这样的函数。

“IRB auto_complete 保证函数是你想要的”的核心假设是完全错误的和错误的。

于 2012-06-29T17:40:42.660 回答