Mein Verständnis von Ruby war, dass das 'neue' Schlüsselwort immer mit einem Klassennamen kombiniert wurde, um eine neue Instanz einer Klasse zu erstellen. In dem folgenden Code, der unter https://gist.github.com/e9c0da1a6e92dd12cbc7 gefunden wurde, der als Lösung für einen Ruby Programming Challenge für Newbies-Wettbewerb eingereicht wurde, verwendet der Autor dreimal das Schlüsselwort "new", ohne eine Klasse zu instanziieren.Ruby: 'neu' ohne Klasse
In einem Fall wird new (0,0) einer Konstanten CLOSED zugewiesen. In einem anderen Fall ist new (open, close) ein Rückgabewert einer Funktion. Warum so? Was macht "neu", wenn es so benutzt wird? Was schafft es?
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
Also gibt die Methode self.parse eine Instanz neu (open, close) von OpenHours zurück? Sollte es nicht etwas zugewiesen werden? – BrainLikeADullPencil