>> class Foo;end
=> nil
>> f = Foo.new
=> #<Foo:0x10189038>
>> def f.bar; puts "ja"; end
=> nil
>> f.bar
ja
=> nil
>> f.dup.bar
NoMethodError: undefined method `bar' for #<Foo:0x101832f0>
        from (irb):5
>> f.clone.bar
ja
=> nil

Here's a technical description:

"While clone is used to duplicate an object, including its internal state,
dup typically uses the class of the descendent object to create the new
instance."
http://www.ruby-doc.org/docs/rdoc/1.9/classes/Object.html#M000889

I'm interested in the reasoning behind this.

Kind regards

    robert