[解決済み】Rubyのdupメソッドとcloneメソッドの違いとは?
2022-04-06 16:37:01
質問
その
のRubyドキュメント
dup
と言ってください。
一般的には
clone
とdup
は、子孫のクラスで異なるセマンティクスを持つことがあります。一方clone
は、内部状態を含めてオブジェクトを複製するために使用されます。dup
通常、新しいインスタンスを作成するために子孫オブジェクトのクラスを使用します。
でも、テストしてみたら、実は同じだったんです。
class Test
attr_accessor :x
end
x = Test.new
x.x = 7
y = x.dup
z = x.clone
y.x => 7
z.x => 7
では、この2つの方式にはどのような違いがあるのでしょうか。
どのように解決するのか?
サブクラスは、これらのメソッドをオーバーライドして、異なるセマンティクスを提供することができます。で
Object
自体には、2つの重要な違いがあります。
まず1つ目。
clone
はシングルトン・クラスをコピーし、一方
dup
はしません。
o = Object.new
def o.foo
42
end
o.dup.foo # raises NoMethodError
o.clone.foo # returns 42
2つ目
clone
は凍結状態を保持するのに対し
dup
を使用しません。
class Foo
attr_accessor :bar
end
o = Foo.new
o.freeze
o.dup.bar = 10 # succeeds
o.clone.bar = 10 # raises RuntimeError
は これらのメソッドに対する Rubinius の実装 というのも、この実装は非常に明快であり、Rubyの実装にかなり準拠しているからです。
関連
-
[解決済み] ルビーオールウェイズ ラウンドアップ
-
[解決済み] RMagickのインストール。MagickWand.hが見当たりません。
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] rake db:migrate db:reset とdb:schema:loadの違いについて
-
[解決済み] イコール、エクル、==、==の違いは何ですか?
-
[解決済み] Rubyのattr_accessor, attr_reader, attr_writerを使う理由は?
-
[解決済み] git branch、fork、fetch、merge、rebase、cloneの違いは何ですか?
-
[解決済み] Rubyのincludeとrequireの違いは何ですか?
-
[解決済み】gitのpullとcloneの違いは何ですか?
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rubyで "gets "と "gets.chomp "を使用する方法
-
[解決済み] Rubyのローカル変数が未定義である
-
[解決済み] RVM は関数ではないので、'rvm use ...' でルビーを選択してもうまくいきません。
-
[解決済み] Ruby プログラムに一定時間待つように指示する
-
[解決済み] Rubyのコロン演算子とは何ですか?
-
[解決済み] Rubyでリモートホストの到達可能性をpingで確認する方法
-
[解決済み] Rubyで日付文字列をパースする
-
[解決済み] マトリックスサムネーションチャレンジ
-
[解決済み] Rubyでfailキーワードは何をするのですか?
-
[解決済み】Rubyでハッシュをコピーする方法は?