Ruby についての私の理解では、'new' キーワードは常にクラス名と組み合わされて、クラスの新しいインスタンスを作成するというものでした。https://gist.github.com/e9c0da1a6e92dd12cbc7にある以下のコードでは、Ruby Programming Challenge for Newbies コンテストの解決策として提出されました。作成者は、クラスをインスタンス化せずに「new」キーワードを 3 回使用しています。
あるケースでは、new(0,0) が定数 CLOSED に割り当てられています。別のケースでは、new(open,close) は関数からの戻り値です。なぜこのようにするのですか?このように使用された場合、「新しい」は何をしていますか? それは何を作成していますか?
class OpenHours
attr_reader :open, :close
def initialize(open, close)
@open, @close = open, close
end
def duration
@duration ||= @open < @close ? @close - @open : 0
end
CLOSED = new(0, 0) #first new
def self.parse(open, close)
open = Time.parse(open)
close = Time.parse(close)
open = TimeUtils::seconds_from_midnight(open)
close = TimeUtils::seconds_from_midnight(close)
new(open, close) #second new
end
def offset(seconds)
self.class.new([@open, seconds].max, @close) #third new
end
end