Wraps its argument in an array unless it is already an array (or array-like).
Specifically:
-
If the argument is
nil
an empty list is returned. -
Otherwise, if the argument responds to
to_ary
it is invoked, and its result returned. -
Otherwise, returns an array with the argument as its single element.
123Array
.wrap(
nil
)
# => []
Array
.wrap([
1
,
2
,
3
])
# => [1, 2, 3]
Array
.wrap(
0
)
# => [0]
This method is similar in purpose to Kernel#Array
, but there
are some differences:
-
If the argument responds to
to_ary
the method is invoked.Kernel#Array
moves on to tryto_a
if the returned value isnil
, butArray.wrap
returnsnil
right away. -
If the returned value from
to_ary
is neithernil
nor anArray
object,Kernel#Array
raises an exception, whileArray.wrap
does not, it just returns the value. -
It does not call
to_a
on the argument, but returns an empty array if argument isnil
.
The second point is easily explained with some enumerables:
1 2 | Array (foo: :bar ) # => [[:foo, :bar]] Array .wrap(foo: :bar ) # => [{:foo=>:bar}] |
There's also a related idiom that uses the splat operator:
1 | [*object] |
which returns []
for nil
, but calls to
Array(object)
otherwise.
The differences with Kernel#Array
explained above apply to the
rest of object
s.
Please login to continue.