On Dec 28, 2010, at 18:50 , RichardOnRails wrote:
> In trying to understand the splat operator, I visited:
> =
http://theplana.wordpress.com/2007/0...plat-operator/
>=20
> The first example that site offers is:
> The split mode :
> pet1, pet2, pet3 =3D *["duck","dog","cat"]
>=20
> That resulted in pet1 =3D=3D "duck", etc
>=20
> But so did:
> pet1, pet2, pet3 =3D ["duck","dog","cat"] # no splat operator
> and#
> pet1, pet2, pet3 =3D "duck","dog","cat" # no array-literal markers
>=20
> So this first example makes no sense, does it? What am I missing?
The fact that you're splatting an array doesn't matter, just the fact =
that you're splatting.
# 1
pet1, pet2, pet3 =3D *["duck","dog","cat"]
# 2
pet1, pet2, pet3 =3D ["duck","dog","cat"] # no splat operator
# 3
pet1, pet2, pet3 =3D "duck","dog","cat" # no array-literal markers
# parses as:
#
# s(:block,
# # 1
# s(:masgn,
# s(:array, s(:lasgn,

et1), s(:lasgn,

et2), s(:lasgn,

et3)),
# s(:splat, s(:array, s(:str, "duck"), s(:str, "dog"), s(:str, =
"cat")))),
# # 2
# s(:masgn,
# s(:array, s(:lasgn,

et1), s(:lasgn,

et2), s(:lasgn,

et3)),
# s(:to_ary, s(:array, s(:str, "duck"), s(:str, "dog"), s(:str, =
"cat")))),
# # 3
# s(:masgn,
# s(:array, s(:lasgn,

et1), s(:lasgn,

et2), s(:lasgn,

et3)),
# s(:array, s(:str, "duck"), s(:str, "dog"), s(:str, "cat"))))
# In all 3 cases, you're dealing with a multi-assign w/ an array on LHS.
#
# RHS:
# 1) splatted array
# 2) to_ary array (or any object, see below)
# 3) array (whether you use [] or not, it is still an array literal)
a, b, c =3D x
a, b, c =3D *x
# s(:block,
# # 1
# s(:masgn,
# s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c)),
# s(:to_ary, s(:call, nil,

, s(:arglist)))),
# # 2
# s(:masgn,
# s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c)),
# s(:splat, s(:call, nil,

, s(:arglist)))))