2017-08-29 5 views
-6

Time.zone.newと思われるものはTime.zone.localと思われます。ただし、Time.zone.newは存在しません。なぜこの特有の命名法が標準から逸脱しているのですか?「Time.zone.new」ではなく「Time.zone.local」と呼ばれるのはなぜですか?

更新: Railsは、特定のタイプの新しいオブジェクトをインスタンス化するときに、おそらく.newを使用するという慣習から逸脱していると考えられるかどうかについての質問です。例えば、Time.zone.new(2013,10,1)の代わりにTime.zone.local(2013,10,1)を使用してTimeWithZoneオブジェクトを取得します。

+0

あなたは 'new'の代わりに[' now'](http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-i-now)を参照していますか? – schmijos

+0

@ndn 'ActiveSupport :: TimeZone'ではなく' Time'で正しい? – schmijos

+0

私はプログラミングとは関係がないので、この質問をトピックとしてクローズすることにしました。 – kabanus

答えて

2

新しい値を返すすべてのメソッドは、newとは限りません。

一般に、newは、常にそのクラスの新しいインスタンスを返すクラスのメソッドであることが期待されます。しかし、Time.zone.localでは、Time.zoneはクラスではなく、ActiveSupport::TimeZoneのインスタンスです。 newと定義すると、Time.zoneがオブジェクトインスタンスではなくクラスを返すことを意味するので、かなり誤解を招きます。

したがって、ActiveSupport::TimeZone#localは、ローカルの(つまり選択された)タイムゾーンに新しいActiveSupport::TimeWithZoneインスタンスを作成する方法の分かりやすい名前です。 Time.zoneto the current user's timezoneを設定する通常のRailsコンテキストでは、Time.zone.local(...)を呼び出すパターンは、ここで何が起きているのかを明確にします。ユーザのローカルタイムゾーンに新しいTime-likeオブジェクトを作成する。

+2

また、 'Time.zone.new'は' Time.zone.'クラスのインスタンス、つまり 'TimeWithZone'インスタンスの代わりに' TimeZone'インスタンスを返すことを意味します。 – Stefan

関連する問題