.dup
是一种 Ruby 方法。它不是特定于 Rails 的。查看Ruby 文档以获取更多信息。
您已经知道.dup
在对象上运行会创建该对象的副本。但是,您经常会同时看到.clone
和.dup
调用。根据文档:
一般来说,clone 和 dup 在后代类中可能有不同的语义。虽然 clone 用于复制对象,包括其内部状态,但 dup 通常使用后代对象的类来创建新实例。
它可能超出了你的帖子的范围,但这里有两个例子可以帮助你理解和之间的.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