2016-06-16 9 views
0

Beginnen wir mit der Annahme Ich möchte eine Methode, die es einem Objekt ermöglicht, sich in ein anderes Objekt zu verwandeln. B Wo ist ein A-ObjektÄndern der Selbstklasse innerhalb einer Methode?

(In B-Modell) ->

def change_type 
    self = self.becomes (A) 
end 

Aber trotzdem kann ich nicht, kann nicht "selbst" ändern. Wie kann ich es reparieren? Die Besetzung muss im Modell sein.

+1

Das ist unmöglich. – mudasobwa

+2

Das riecht nach schlechtem OOP für mich. Warum sollten Sie das tun? 'B' ist schon ein' A'. –

Antwort

0

Es gibt keinen Weg. Sie können self nicht überschreiben. Oder irgendein Objekt *, in der Tat.


* Sie können Referenz/variabel, aber nicht das Objekt selbst zuweisen.

0

Sie können die Klasse eines einmal erstellten Objekts weder ändern noch ein Objekt in ein anderes Objekt ändern.

Sie denken an Smalltalk's become: method, die ein Objekt zu einem anderen Objekt machen kann (und somit als Spezialfall auch die Klasse eines Objekts ändern kann). Ruby hat das nicht.

0

Wenn die Klasse B die Klasse A erbt, wird eine Instanz von B als Instanz von A geboren. Keine Notwendigkeit, sich zu ändern.

class A; end 

class B < A; end 

b = B.new 

b.is_a?(A) #=> true 
Verwandte Themen