PickAxe - Understanding [] on SongList

M

Mohnish Chaudhary

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
=======
 
M

Marcelo

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!

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
 
M

Mohnish Chaudhary

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
=======
 
T

Tim Hunter

Mohnish said:
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.
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top