1
Я заметил, что если я создаю подкласс, который наследует от Datetime
, то это .now
вернет экземпляр подкласса, а не Datetime
экземпляр.ruby - вернуть экземпляр текущего класса
class MyDateTime < DateTime
end
MyDateTime.now
>#<MyDateTime: 2012-06-05T16:42:57+08:00 ((2456084j,31377s,900801494n),+28800s,2299161j)>
Кажется магическим. Я не могу воспроизвести это поведение в моем собственном классе:
class A
def self.a
return A.new
end
end
class B < A
end
B.a
#<A:0x00000001e22358>
Я попытался прочитать исходный код DateTime
но он написан на C. Можно ли написать метод класса, который возвращает экземпляр класса это принадлежит?
так очевидно ... спасибо –
Примечания: 'self' является приемником по умолчанию, а возвращаемое значение последнего выражения является возвращаемым значением методы, так как 'self', так и' return' здесь избыточны. Идиоматическая версия будет больше похожа на 'def self.a; новый конец –
Несомненно, я просто хотел как можно меньше изменить в данном примере, чтобы подчеркнуть разницу. – Matzi