A question about ruby array


#1

I read some ruby examples and found there is a syntax I don’t
understand. When getting an array element, it uses “array[:id]”. I
wander why there is a colon before the index. What does this mean?


#2

Hello,
there are Hashes and Arrays. They are different.

array[:id] is for accessing a value from a Hash by using :id as a key.

array = {:id => 1, :something => “value”}
puts array[:id] #prints 1
puts array[:something] #prints “value”

Your example uses wrong name for a variable. It should be “hash” :).

Marius Žilėnas

Zhao Yi wrote:

I read some ruby examples and found there is a syntax I don’t
understand. When getting an array element, it uses “array[:id]”. I
wander why there is a colon before the index. What does this mean?


#3

Hi –

On Wed, 17 Dec 2008, Zhao Yi wrote:

I read some ruby examples and found there is a syntax I don’t
understand. When getting an array element, it uses “array[:id]”. I
wander why there is a colon before the index. What does this mean?

It’s actually hashes, not arrays, that use this syntax (see other
reply in this thread). What the :id thing means is that :id is a
Symbol object. Symbol is a class of objects that correspond directly
to entries in Ruby’s internal symbol table. There’s one entry for
every identifier in use while your program is running: every variable
name, method name, and constant. If you want to see them all, you can
do:

Symbol.all_symbols

in irb.

The symbol table is really part of the inner workings of the
interpreter, but Ruby exposes it to programmer-space through the
Symbol class. Symbols have characters; therefore, they’re used a lot
in situations where you might also use strings (such as hash keys).
They’re more lightweight in terms of processing than strings are: a
string has to know how to resize itself, for example, whereas a symbol
is immutable.

David


#4

David A. Black wrote:

It’s actually hashes, not arrays, that use this syntax (see other
reply in this thread). What the :id thing means is that :id is a
Symbol object. Symbol is a class of objects that correspond directly
to entries in Ruby’s internal symbol table. There’s one entry for
every identifier in use while your program is running: every variable
name, method name, and constant. If you want to see them all, you can
do:

Symbol.all_symbols

in irb.

The symbol table is really part of the inner workings of the
interpreter, but Ruby exposes it to programmer-space through the
Symbol class. Symbols have characters; therefore, they’re used a lot
in situations where you might also use strings (such as hash keys).
They’re more lightweight in terms of processing than strings are: a
string has to know how to resize itself, for example, whereas a symbol
is immutable.

David

Ok I understand,

thanks for your explanation.