Forum: Ruby Is [ ] really a method ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
41918fc34e4c3a365eabbd04ba9b551d?d=identicon&s=25 Vin Raja (vineetraja)
on 2007-06-02 05:42
Hi all,

Well while running down the text I read that [] (used in case Arrays and
Hashes) is actually a method called on that Array/hash object and also
that it can be overridden.

well point taken.

BUT if this is just another case of operator overloading then how come
we can call

 a[1]='item'

rather than calling

 a[]1 ='item'

(Anyways this gave me a syntax error)
Or perhaps it is just another case of Syntactic Sugar?
Or perhaps not, because if that has to be true than the second statement
should also have been true.

So Is [] really a method or is a simple grammar token?

Thanks
Raja
F3b02532d4cb4855881935c002389213?d=identicon&s=25 Morton Goldberg (Guest)
on 2007-06-02 05:57
(Received via mailing list)
On Jun 1, 2007, at 11:42 PM, Vin Raja wrote:

> we can call
> statement
> should also have been true.
>
> So Is [] really a method or is a simple grammar token?

You are really asking about []= which is a different method than [].
And, yes, it really is a method, as is shown by

a = ['a']
a.[]=(1, 'b')
a # => ["a", "b"]

which is the same as

a = ['a']
a[1] = 'b'
a # => ["a", "b"]

Regards, Morton
Bf6862e2a409078e13a3979c00bba1d6?d=identicon&s=25 Gregory Seidman (Guest)
on 2007-06-02 06:03
(Received via mailing list)
On Sat, Jun 02, 2007 at 12:42:54PM +0900, Vin Raja wrote:
>
> rather than calling
>
>  a[]1 ='item'
>
> (Anyways this gave me a syntax error)
> Or perhaps it is just another case of Syntactic Sugar?
> Or perhaps not, because if that has to be true than the second statement
> should also have been true.
>
> So Is [] really a method or is a simple grammar token?

Everything is a token in the grammar, of course. When the code is being
parsed the [] is matched as a token, in this case the brackets operator.
The reason your first example works and your second does not is that the
grammar rules for the brackets operator take the arguments to the
operator
from between the literal open and close bracket characters. Placing
those
arguments outside the brackets, unsurprisingly, does not work.

Since all operators are implemented as method calls in Ruby, the text is
indeed correct in that [] is called as a method on an Array, Hash, or
whatever the object is.

Note, by the way, that the operator in your examples is actually []=
rather
than [], i.e. it is an element assignment rather than an element
retrieval.

> Thanks
> Raja
--Greg
235c58ad566abb4c7979bc7033e9882c?d=identicon&s=25 David Morton (dgm)
on 2007-06-02 06:21
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


On Jun 1, 2007, at 10:42 PM, Vin Raja wrote:

> we can call
>
>  a[1]='item'
>
> rather than calling
>
>  a[]1 ='item'
>
> (Anyways this gave me a syntax error)



try:

a.[](1)

and

a.[]=(1,'item')


I'd say it is syntactical sugar for those methods....


David Morton
Maia Mailguard http://www.maiamailguard.com
mortonda@dgrmm.net



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Darwin)

iD8DBQFGYOiQUy30ODPkzl0RAnigAJ9GYjaWL0oqfrQTW5gp1jIdSE7NgACfQJ34
g0x2F9TIfcHLYDbQm1QIWSY=
=kMhu
-----END PGP SIGNATURE-----
This topic is locked and can not be replied to.