Ich habe eine Situation, in der ich so etwas nennen muss:
%Vor%Arbeiterklasse
%Vor%Ich kann so etwas sehr gut machen
%Vor% Aber ich muss dasselbe tun, was ich oben getan habe, wie das Folgende. Davor muss ich die Initialisierungsmethode von Office ändern, um die Methode def <<(worker)
der Worker-Instanz zu starten.
Jetzt ist das Problem, die spätere Implementierung erstellt 2 Instanzen des Arbeiters ??
Ich bin mir nicht ganz sicher, aber ich nehme an, Sie möchten das haben:
%Vor%Ende
Auf diese Weise können Sie Worker#<<
vollständig entfernen und auch die Zeile
in Worker#initialize
, da office.workers
ein Array sein soll. Es ist eine schlechte Idee, den Typ eines Attributs (Duck-Typing OK) vor und zurück zu ändern, da es wahrscheinlich ist, dass Sie den aktuellen Status verlieren und früher oder später Fehler auftreten.
Um "Getrennte Trennung" zu folgen, würde ich empfehlen, die gesamte Verwaltung von workers
ausschließlich in Office
durchzuführen, sonst wird es zu schnell zu verwirrend und auf lange Sicht viel schwieriger zu pflegen.
Ich bin mir nicht 100% sicher, warum Sie hier keinen Fehler bekommen, aber da die letzte Zeile von Office # Worker ist, ist self.workers & lt; & lt; Arbeiter, Sie fügen den neuen Arbeiter hinzu, der in Office # Worker erstellt wurde (in der dritten Zeile der Methode), und geben dann das Worker-Objekt zurück, das dann # & lt; & lt; erneut mit dem neuen Mitarbeiter aufgerufen, der außerhalb der Methode
erstellt wurdeTags und Links ruby ruby-on-rails rubygems