Question about a multiple assignment statement used in Rails

Discussion in 'Ruby' started by zenshade@gmail.com, Aug 16, 2006.

  1. Guest

    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.
    , Aug 16, 2006
    #1
    1. Advertising

  2. Jan Svitok Guest

    On 8/16/06, <> 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.
    Jan Svitok, Aug 16, 2006
    #2
    1. Advertising

  3. Guest

    Jan Svitok wrote:
    > a, b = [1,2] => a == 1, b == 2
    >
    > So that's it.



    Ah, I see. The method returns an object with multiple values that get
    unpacked by the multi-assignment.

    That's very cool, but a bit obtuse. I think I can learn to like it,
    though ;).

    Thanks
    , Aug 16, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Anand P Paralkar
    Replies:
    2
    Views:
    9,384
    Srinivasan Venkataramanan
    Aug 4, 2003
  2. nagy
    Replies:
    36
    Views:
    1,003
    Terry Reedy
    Jul 20, 2006
  3. Replies:
    2
    Views:
    271
  4. Chris
    Replies:
    34
    Views:
    1,515
  5. Richard Tobin
    Replies:
    6
    Views:
    623
    Richard Tobin
    Apr 22, 2007
Loading...

Share This Page