La mia comprensione di Ruby era che la "nuova" parola chiave era sempre combinata con un nome di classe per creare una nuova istanza di una classe. Nel codice qui sotto, trovato a https://gist.github.com/e9c0da1a6e92dd12cbc7, che è stato presentato come soluzione a un concorso di Sfida di programmazione di Ruby per Newbies, l'autore usa la parola chiave 'nuova' tre volte senza creare un'istanza di una classe.Ruby: "nuovo" senza classe
In un caso, nuovo (0,0) è assegnato a una costante CHIUSA. In un altro caso, nuovo (aperto, chiuso) è un valore di ritorno da una funzione. Perché farlo in questo modo? Cosa fa 'new' quando viene usato in questo modo? cosa sta creando?
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
quindi il metodo self.parse restituisce un'istanza nuova (aperta, chiusa) di OpenHours? Non dovrebbe essere assegnato a qualcosa? – BrainLikeADullPencil