Need help to understand the difference between #dup and #clone while working singleton methods

19 views
Skip to first unread message

Love U Ruby

unread,
Sep 21, 2013, 6:32:26 PM9/21/13
to rubyonra...@googlegroups.com
Look the below code with Object#clone:

foo = Object.new
def foo.bar
"hi"
end
baz = foo.clone
foo.bar # => "hi"
baz.bar # => "hi"

Now with Object#dup

foo = Object.new
def foo.bar
"hi"
end
baz = foo.dup
foo.bar # => "hi"
baz.bar # `<main>': undefined method `bar' for #<Object:0x989b378>
(NoMethodError)

Why the below part didn't work.

--
Posted via http://www.ruby-forum.com/.

Narrenblut .

unread,
Sep 22, 2013, 8:36:10 PM9/22/13
to rubyonra...@googlegroups.com
I'd think, the difference in following example shows easier, where is the difference in you case, too


foo = [1,2]
bar= foo.dup
foo<< 3

puts bar.inspect

foo= [ [1,2] ]
bar = foo.dup
foo[0] << 3

puts bar.inspect

Try it with clone - and you recognize the difference between deep copy clone and shallow copy dup

In your case you only get a Object.new where you set: baz = foo.dup




--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/df21c6695a428cad5b46941018158f1c%40ruby-forum.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply all
Reply to author
Forward
0 new messages