当我使用时:
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 ((...
为什么?
答案 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确保函数符合您的要求”的核心假设完全被误导和错误。