Module: Corefines::Array::Wrap
- Defined in:
- lib/corefines/array.rb
Class Method Summary collapse
-
.wrap(object) ⇒ Array
Wraps its argument in an array unless it is already an array (or array-like).
Class Method Details
.wrap(object) ⇒ Array
Wraps its argument in an array unless it is already an array (or array-like).
Specifically:
- If the argument is
nilan empty list is returned. - Otherwise, if the argument responds to
to_aryit is invoked, and its result returned. - Otherwise, returns an array with the argument as its single element.
This method is similar in purpose to Kernel#Array, but there are some differences:
- If the argument responds to
to_arythe method is invoked. Kernel#Array moves on to tryto_aif the returned value isnil, but Array.wrap returnsnilright away. - If the returned value from
to_aryis neithernilnor anArrayobject, Kernel#Array raises an exception, while Array.wrap does not, it just returns the value. - It does not call
to_aon the argument, but returns an empty array if argument isnil.
The second point is easily explained with some enumerables:
Array(foo: :bar) # => [[:foo, :bar]]
Array.wrap(foo: :bar) # => [{:foo=>:bar}]
There's also a related idiom that uses the splat operator:
[*object]
which returns [] for nil, but calls to
Array(object) otherwise.
The differences with Kernel#Array explained above apply to the rest of objects.
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/corefines/array.rb', line 74 module Wrap refine ::Array.singleton_class do def wrap(object) if object.nil? [] elsif object.respond_to? :to_ary object.to_ary || [object] else [object] end end end end |