Kann ich Klasse B durch eine in Klasse A definierte Klassenmethode instanziieren, wenn ich eine Klasse B habe, die von Klasse A erbt?
class A
def self.instantiate params
# ???
end
end
class B < A
end
b = B.instantiate 123
b.class # => B
Natürlich möchte ich nicht anrufen B.new
von A. Jede Klasse, die von A erbt, sollte davon profitieren.
class C < A; end
c = C.instantiate 123
c.class # => C
class D < A; end
d = D.instantiate 123
d.class # => D
Antworten:
1 für die Antwort № 1Einfach anrufen self.new
(self
referenziert die Klasse selbst in der Klassenmethode):
class A
def self.instantiate params
self.new
# OR simply `new`
end
end
class B < A; end
b = B.instantiate 123
b.class
# => B
class C < A; end
c = C.instantiate 123
c.class
# => C
class D < A; end
d = D.instantiate 123
d.class
# => D
AKTUALISIEREN
Wie Cary Swoveland kommentierte, können Sie weglassen self.
:
def self.instantiate params
new
end