Jano Svitok
8/16/2006 1:52:00 PM
On 8/16/06, zenshade@gmail.com <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.