Chcę utworzyć podklasę Data.Dlaczego funkcja Date.new nie inicjalizuje połączenia?
Normalny, zdrowy, młody rubyist, unscarred przez idiosynkrazji realizacji data byłby przejść o tym w następujący sposób:
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
i przejść do wykorzystania go w sposób najbardziej oczekiwanym ...
require 'my_date'
mdt = MyDate.new(2012, 1, 28)
puts mdt.to_s
... tylko być dwukrotnie przeszedł przez fakt, że data :: nowa metoda jest właściwie aliasem Date :: cywilnego, który nie kiedykolwiek połączeń zainicjowany. W tym przypadku ostatni fragment kodu drukuje "2012-01-28" zamiast oczekiwanego "2012-12-25".
Droga społeczność Ruby, wtf to jest?
Czy jest jakiś bardzo dobry powód do aliasing nowy, tak że ignoruje zainicjować, a w rezultacie żadnego zdrowego rozsądku i szacunku dla zdrowia psychicznego klienta programisty?
przez którego definicja "dobre"? –
Jaka jest alternatywa? W przypadku wywołania funkcji civil from initialize przydzielony zostanie obiekt, którego nie potrzebujesz. – pguardiario
Cóż, po prostu wydaje się semantycznie niewłaściwe, aby przydzielić i zainicjować obiekt w tej samej metodzie. Chodzi mi o to, że jeśli 'civil' jest de facto" nowym ", to dlaczego nie nazwać go' initialize' w końcu? Może to być czysta formalność w 'Date', ale pozwoli rozszerzyć klasę bez potrzeby wnikania w szczegóły jej implementacji. Zastanawiałem się więc, dlaczego decyzja o aliasie 'civil' na' new' mogła zostać podjęta? – jst