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 個の関数が定義されています。いずれかでタブを押してみると、begin と between がたまたまそのような関数でした。

「IRB auto_complete は、関数があなたが望むものであることを保証する」というコアの仮定は、完全に見当違いで間違っています。

于 2012-06-29T17:40:42.660 に答える