/ / Instanziieren von Instanzen der Unterklasse aus der übergeordneten Klasse in Ruby - Ruby, Vererbung, Instantiierung, Klassenmethode

Instanziieren von Instanzen der Unterklasse aus der übergeordneten Klasse in Ruby - Ruby, Vererbung, Instanziierung, Klassenmethode

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 № 1

Einfach 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