1
 user = User.find_or_create_by_email 
:name => ENV['ADMIN_NAME'].dup, 
:email => ENV['ADMIN_EMAIL'].dup, 
:password => ENV['ADMIN_PASSWORD'].dup, 
:password_confirmation => ENV['ADMIN_PASSWORD'].dup

これは私の単純なseeds.rbの一部です。Rails Composerによって作成されました。私はそれが何をするか知っていますが、.dup に関する情報を見つけることができません。

そのための情報はありますか?

宜しくお願いします。

4

2 に答える 2

2

.dupRubyメソッドです。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

于 2013-06-06T07:26:37.720 に答える