Ich lebe seit Jahren in der C ++ - Welt und fange gerade mit Ruby an. Ich habe eine Klasse, die ich gerne einen Thread machen würde. In Ruby ist es falsch, eine Klasse von Thread abzuleiten? Die Beispiele, die ich sehe, verwenden das folgende Konzept.
%Vor%Wäre es falsch, das zu tun?
%Vor%Ich denke, das ist wirklich eine Frage der Domänenmodellierung.
Es wäre nichts falsch mit dem, was Sie tun, wenn Sie die Art und Weise, wie sich ein Thread verhält, erweitern oder verbessern möchten - zum Beispiel um Debug- oder Performance-Ausgaben hinzuzufügen, aber ich glaube nicht, dass Sie das wollen.
Sie möchten wahrscheinlich ein Konzept in Ihrer Domäne mit aktiven Objekten modellieren. In diesem Fall ist der Ruby-Standardansatz besser, weil Sie dies erreichen können, ohne Ihr Domänenmodell zu verbiegen.
Vererbung sollte eigentlich nur zum Modellieren von IS_A-Beziehungen verwendet werden. Der Standard-Ruby-Code für diese Lösung fasst die Lösung sauber zusammen.
Um Ihr Objekt aktiv zu machen, lassen Sie es den neu erzeugten Thread in einer Methode erfassen
%Vor%Das ist vollkommen in Ordnung, ich habe Leute schon früher gesehen. Hier ist ein Beispielcode aus einer der Ruby-Mailinglisten, der ausgeführt wird, wenn Thread.new aufgerufen wird:
%Vor%Wenn Sie Thread.fork oder Thread.start zum Ausführen Ihres Threads aufrufen möchten, sollten Sie dies von Ruby Dokumentation diese Methoden :
"Im Prinzip das gleiche wie Thread :: new. Wenn die Klasse Thread jedoch unterkonsolidiert ist, ruft der Aufruf von start in dieser Unterklasse die Initialisierungsmethode der Unterklasse nicht auf."
Es ist nicht wirklich der Rubin-Weg, aber es hängt davon ab, was Sie mit dem Thread erreichen wollen.
Zunächst einmal hat Ruby 1.8 nicht wirklich echte Threads, also sind sie nur für IO-gebundene Dinge wirklich nützlich.
Im Allgemeinen möchten Sie in Ruby etwas tun, um eine Aktion in einem Thread auszuführen, anstatt einen Thread darzustellen. Daher ist es einfacher, eine normale Klasse zu definieren, die Threads innerhalb des Threading-Aspekts erstellt.
Vererbung ist eine IS_A-Beziehung
Tags und Links ruby multithreading