Voglio creare una sottoclasse di Data.Perché Date.new non chiama l'inizializzazione?
Un normale, sana, giovane rubyist, Unscarred per l'idiosincrasia di implementazione di Data sarebbe andare su questo nel modo seguente:
require 'date'
class MyDate < Date
def initialize(year, month, day)
@original_month = month
@original_day = day
# Christmas comes early!
super(year, 12, 25)
end
end
e procedere ad usarlo nel modo più atteso ...
require 'my_date'
mdt = MyDate.new(2012, 1, 28)
puts mdt.to_s
... solo per essere il doppio gioco per il fatto, che il metodo Date :: nuovo è in realtà un alias a Data :: civile, che non mai chiamata inizializzazione. In questo caso, l'ultima porzione di codice stampa "2012-01-28" anziché l'attesa "2012-12-25".
Caro Ruby-comunità, wtf è questo?
c'è qualche buona ragione per aliasing nuova, in modo che ignora inizializzare, e, di conseguenza, alcun senso e proposito comune per la salute mentale del programmatore del cliente?
Con la cui definizione di "buono"? –
Qual è l'alternativa? Se chiami Civil da inizializzare, hai assegnato un oggetto che non ti serve. – pguardiario
Bene, sembra semplicemente semanticamente sbagliato allocare e inizializzare un oggetto nello stesso metodo. Voglio dire, se 'civil' è di fatto' nuovo', perché non farlo chiamare 'initialize' alla fine? Potrebbe essere una pura formalità in "Date", ma permetterà di estendere la classe senza la necessità di scavare nei dettagli dell'implementazione. Quindi, mi chiedevo, perché la decisione di alias 'civil' in' new' avrebbe potuto essere presa? – jst