Quiero crear una subclase de Fecha.¿Por qué Date.new no invoca initialize?
A, sana, joven Rubyist normal, unscarred por la idiosincrasia de aplicación de fecha sería ir sobre esto de la siguiente manera:
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
y proceder a utilizarlo de la manera más esperado ...
require 'my_date'
mdt = MyDate.new(2012, 1, 28)
puts mdt.to_s
... sólo para ser traicionado por el hecho de que el método de la fecha :: nueva es en realidad un alias a la fecha :: civiles, lo que no siempre initialize llamada. En este caso, la última pieza de código imprime "2012-01-28" en lugar de la esperada "2012-12-25".
Estimado Ruby-community, wtf es esto?
¿Hay alguna razón muy buena de aliasing nuevo, por lo que ignora inicializar, y como resultado, cualquier sentido común y respeto por la salud mental del programador del cliente?
Por cuya definición de "bueno"? –
¿Cuál es la alternativa? Si llama a civil desde la inicialización, ha asignado un objeto que no necesita. – pguardiario
Bueno, parece semánticamente incorrecto asignar e inicializar un objeto en el mismo método. Quiero decir, si 'civil' es el 'nuevo' de facto, ¿por qué no hacer que llame' initialize' al final? Puede ser una formalidad pura en 'Fecha', pero permitirá ampliar la clase sin necesidad de profundizar en los detalles de su implementación. Por lo tanto, me preguntaba, ¿por qué la decisión de alias 'civil' a' new' podría haberse tomado? – jst