PickAxe - Understanding [] on SongList

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

···

=======
--
Posted via http://www.ruby-forum.com/.

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

···

On Wed, Apr 23, 2008 at 6:07 AM, Mohnish Chaudhary <mohnish82@rediffmail.com> wrote:

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!

Thanks Marcelo,

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

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

···

=======
--
Posted via http://www.ruby-forum.com/.

Mohnish Chaudhary wrote:

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)

Look for "Element Reference Operator" in the book. In the 2nd Edition
it's on page 336.

···

--
Posted via http://www.ruby-forum.com/\.

Thanks Tim.

···

--
Posted via http://www.ruby-forum.com/.