PickAxe - Understanding [] on SongList

Discussion in 'Ruby' started by Mohnish Chaudhary, Apr 23, 2008.

  1. Hi,

    I am a newbie and am following Programming Ruby 2nd edition. On page 44,
    there's this piece of code,

    class SongList
    def initialize
    @songs = Array.new
    def [](index)

    Now, the following code works fine,
    list = SongList.new
    list[0] # this works fine, but how ?

    What I don't understand is how is "list[0]" working ? The syntax of the
    method specified is "[](index)", so how come can we pass the index
    within the braces instead of after it i.e shouldn't it be "list.[](0)"?
    But strangely, both work!

    Please let me understand how "list[0]" works fine for the function
    defined as "[](index)".

    Mohnish Chaudhary, Apr 23, 2008
    1. Advertisements

  2. Mohnish Chaudhary

    Marcelo Guest

    That's Ruby syntax sugar. When you define a method called "[]" which
    takes one argument you can call it like this:


    You can also define "[]=" taking two arguments which you can call it
    like this:

    instance[arg1] = arg2

    You can define "[]" taking two arguments and call it like this:

    instance[arg1, arg2]

    And so on...

    Marcelo, Apr 23, 2008
    1. Advertisements

  3. Thanks Marcelo,

    I must admit this language is strange ( but it's fun :) )

    Is this documented in the "Programming Ruby" book? If not, where else
    can I find it documented ?(so that, in future, I can refer the resource
    before posting my questions)

    Mohnish Chaudhary, Apr 23, 2008
  4. Mohnish Chaudhary

    Tim Hunter Guest

    Look for "Element Reference Operator" in the book. In the 2nd Edition
    it's on page 336.
    Tim Hunter, Apr 23, 2008
  5. Thanks Tim.
    Mohnish Chaudhary, Apr 23, 2008
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.