On Dec 28, 10:12 ¨Âí¬ Òùáî Äáöé¼òùáîäò®®®Àúåîóðéäåò®ãïí¾ ÷òïôåº > On Dec 28, 2010, at 18:50 , RichardOnRails wrote: > > > In trying to understand the splat operator, I visited: > >http://theplana.wordpress.com/2007/03/03/ruby-idioms-the-splat-operator/ > > > The first example that site offers is: > > The split mode : > > pet1, pet2, pet3 = *["duck","dog","cat"] > > > That resulted in pet1 == "duck", etc > > > But so did: > > pet1, pet2, pet3 = ["duck","dog","cat"] # no splat operator > > and# > > pet1, pet2, pet3 = "duck","dog","cat" # no array-literal markers > > > So this first example makes no sense, does it? ¨Âèááí íéóóéîç¿ > > The fact that you're splatting an array doesn't matter, just the fact that you're splatting. > > # 1 > pet1, pet2, pet3 = *["duck","dog","cat"] > > # 2 > pet1, pet2, pet3 = ["duck","dog","cat"] # no splat operator > > # 3 > pet1, pet2, pet3 = "duck","dog","cat" # no array-literal markers > > # parses as: > # > # s(:block, > # # 1 > # s(:masgn, > # s(:array, s(:lasgn, :pet1), s(:lasgn, :pet2), s(:lasgn, :pet3)), > # s(:splat, s(:array, s(:str, "duck"), s(:str, "dog"), s(:str, "cat")))), > # # 2 > # s(:masgn, > # s(:array, s(:lasgn, :pet1), s(:lasgn, :pet2), s(:lasgn, :pet3)), > # s(:to_ary, s(:array, s(:str, "duck"), s(:str, "dog"), s(:str, "cat")))), > # # 3 > # s(:masgn, > # s(:array, s(:lasgn, :pet1), s(:lasgn, :pet2), s(:lasgn, :pet3)), > # 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 = x > a, b, c = *x > > # s(:block, > # # 1 > # s(:masgn, > # s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c)), > # s(:to_ary, s(:call, nil, :x, s(:arglist)))), > # # 2 > # s(:masgn, > # s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c)), > # s(:splat, s(:call, nil, :x, s(:arglist))))) Hi Ryan, It looks to me the you gave me Lisp expressions one could use, in part, to translate the three right-hand-sides I provided. I knew that Ruby treats "x,y = 1,2" as equivalent to "x=1; y=2", but I didn't know that Ruby first view them as "LHS-array assigned values from a RHS-array" (which is how I interpret your expressions, which look like Lisp to me). Ultimately, then, the website's first lines show me that splat on arrays is an Identity prefix operator, without mentioning that explicitly. That's not very helpful, IMHO. Don't you agree? Best wishes, Richard