class
Object
v3.0.0 -
Show latest stable
- Superclass: Object
Most objects are cloneable, but not all. For example you can’t dup nil:
nil.dup # => TypeError: can't dup NilClass
Classes may signal their instances are not duplicable removing dup/clone or raising exceptions from them. So, to dup an arbitrary object you normally use an optimistic approach and are ready to catch an exception, say:
arbitrary_object.dup rescue object
Rails dups objects in a few critical spots where they are not that arbitrary. That rescue is very expensive (like 40 times slower than a predicate), and it is often triggered.
That’s why we hardcode the following cases and check duplicable? instead of using that rescue idiom.
Files
- activesupport/lib/active_support/core_ext/kernel/agnostics.rb
- activesupport/lib/active_support/core_ext/object/acts_like.rb
- activesupport/lib/active_support/core_ext/object/blank.rb
- activesupport/lib/active_support/core_ext/object/duplicable.rb
- activesupport/lib/active_support/core_ext/object/instance_variables.rb
- activesupport/lib/active_support/core_ext/object/returning.rb
- activesupport/lib/active_support/core_ext/object/to_param.rb
- activesupport/lib/active_support/core_ext/object/to_query.rb
- activesupport/lib/active_support/core_ext/object/try.rb
- activesupport/lib/active_support/core_ext/object/with_options.rb
- activesupport/lib/active_support/core_ext/string/output_safety.rb
- activesupport/lib/active_support/json/encoding.rb