klar Es ist wahr, dass clone
Kopien der frozen
Zustand eines Objekts, während dup
nicht:
o = Object.new
o.freeze
o.clone.frozen?
#=> true
o.dup.frozen?
#=> false
clone
wird auch die Singleton-Methoden des Objekts kopieren, während dup
nicht:
Das führt mich zu der Annahme, dass clone
manchmal verstanden wird, um eine "tiefere" Kopie als dup
zu liefern. Hier sind einige Zitate über das Thema:
Comment on ActiveRecord::Base#initialize_dup
from Rails 3:
Duped Objekte haben keine ID zugewiesen und wird als neuer Datensätze behandelt. Hinweis , dass dies eine "flache" Kopie ist, da es nur die Attribute des Objekts kopiert, nicht seine Zuordnungen. Der Umfang einer "tiefen" Kopie ist Anwendung spezifisch und ist daher der Anwendung überlassen, entsprechend zu seinem Bedarf zu implementieren.
An article about deep copies in Ruby:
Es gibt eine andere Methode erwähnenswert, clone
. Die Methode clone
macht dasselbe wie dup
mit einer wichtigen Unterscheidung: Es wird erwartet, dass Objekte diese Methode mit einer Methode überschreiben, die tiefe Kopien erstellen kann.
But then again, theres deep_dup
in Rails 4:
Gibt eine tiefe Kopie des Objekts, wenn es kopierbar ist. Wenn es nicht duplizierbar ist, wird zurückgegeben.
and also ActiveRecord::Core#dup
and #clone
in Rails 4:
clone
- Identisch mit Verfahren Rubys Klon. Dies ist eine "flache" Kopie. Seien Sie gewarnt, dass Ihre Attribute nicht kopiert werden. [...] Wenn Sie eine Kopie Ihres Attributs Hash benötigen, verwenden Sie bitte die #dup
Methode.
Das bedeutet, dass hier das Wort dup
verwendet wird, um wieder auf einen tiefen Klon zu verweisen. Soweit ich das beurteilen kann, scheint es in der Community keinen Konsens zu geben, außer dass Sie clone
und dup
in dem Fall verwenden sollten, wenn Sie eine bestimmte Nebenwirkung von beiden benötigen.
Schließlich sehe ich dup
viel häufiger in Ruby-Code als clone
. Ich habe noch nie clone
verwendet, und ich werde nicht, bis ich explizit brauche.
Mögliches Duplikat von [Was ist der Unterschied zwischen Rubys dup und clone Methoden?] (Http://stackoverflow.com/questions/10183370/whats-the-difference-between-rubys-dup-and-clone-methods) – OlehZiniak