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.