From: Jan Svitok Date: 2006-08-16T22:52:23+09:00 Subject: Re: Question about a multiple assignment statement used in Rails On 8/16/06, zenshade@gmail.com wrote: > As I'm very much still a ruby newbie, I'm hoping someone can help me to > correctly parse the following statement generated by Rails scaffolding: > > @category_pages, @categories = paginate :category, :per_page => 10 > > This statement occurs in the following context: > > class CategoriesController < ApplicationController > . > . > . > def list > @category_pages, @categories = paginate :category, :per_page => 10 > end > . > . > . > end > > Now, I know that paginate is a method of the ActionController class, > but is it being called with two arguments or one? And if it is being > called with two arguments (:category, :per_page => 10), how is > multi-assignment working here? > > To me, this looks like @category_pages will get the return value of the > paginate method, and @categories will be assigned the value nil. > > Any advice on how to correctly understand this assignment statement > would be greatly appreciated. let's simplify it: var1, var2 = fnc :sym1, :sym2 => 10 1. the right-hand side: function's arguments are divided in two groups: non-hash and hash. all the hash args are passed as one hash, as last argument (also there can be a special argument &block, that will take the block if any was passed). So the call is equivalent to: fnc(:sym1, {:sym2 =>10}) 2, now the left-hand side: if fnc returns an array (what I suppose is the case), the array can be automatically split into items: a, b = [1,2] #=> a == 1, b == 2 So that's it.