.dup
Rubyメソッドです。Railsに固有のものではありません。詳細については、Ruby のドキュメントを参照してください。
.dup
オブジェクトを実行すると、そのオブジェクトの複製が作成されることは既にご存じでしょう。ただし、多くの場合、同じように表示され.clone
、.dup
呼び出されます。ドキュメントによると:
一般に、clone と dup は、子孫クラスで異なるセマンティクスを持つ場合があります。clone は内部状態を含めてオブジェクトを複製するために使用されますが、dup は通常、子孫オブジェクトのクラスを使用して新しいインスタンスを作成します。
投稿の範囲外かもしれませんが、 と の違いを理解するのに役立つ 2 つの例を次に示し.dup
ます.clone
。
o = Object.new
def o.foo
'bar'
end
o.dup.foo #=> raises NoMethodError
o.clone.foo #=> returns 'bar'
class Foo
attr_accessor :bar
end
foo = Foo.new
foo.freeze
foo.dup.bar = 'baz' # returns 'baz'
foo.clone.bar = 'baz' # raises RuntimeError
ご覧のとおり、 のスコープでは、seeds.rb
と の間に違いはありません.dup
(.clone
環境グローバルから複製された文字列からルックアップを実行しているだけなので)。ただし、これらの重複した文字列からオブジェクト メソッドを実行すると、またはを使用するかどうかによって動作が異なる可能性があります。.dup
.clone