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
    end
    def [](index)
    @songs[index]
    end
    end

    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)".

    Regards,
    Mohnish
    =======
     
    Mohnish Chaudhary, Apr 23, 2008
    #1
    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:

    instance[arg]

    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
     
    Marcelo, Apr 23, 2008
    #2
    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)

    Regards,
    Mohnish
    =======
     
    Mohnish Chaudhary, Apr 23, 2008
    #3
  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
    #4
  5. Thanks Tim.
     
    Mohnish Chaudhary, Apr 23, 2008
    #5
    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.