Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/cassandra_mapper/core_ext/object/duplicable.rb
Overview
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.
Instance Method Summary collapse
-
#duplicable? ⇒ Boolean
Can you safely .dup this object? False for nil, false, true, symbols, numbers, class and module objects; true otherwise.
Instance Method Details
#duplicable? ⇒ Boolean
Can you safely .dup this object? False for nil, false, true, symbols, numbers, class and module objects; true otherwise.
20 21 22 |
# File 'lib/cassandra_mapper/core_ext/object/duplicable.rb', line 20 def duplicable? true end |