what is [] here

R

Raj Singh

class User
puts [].methods.size
puts self.methods.size
end


What does it mean to have [] method at a class level? Where is the
documentation for it?
 
M

Matthew Moss

class User
puts [].methods.size
puts self.methods.size
end


What does it mean to have [] method at a class level? Where is the
documentation for it?


[] here is the empty array, not a method call. So [].methods.size just
returns how many methods are defined for an instance of Array.

Why it's at class level, I've no idea. There doesn't seem to be any
need to have it there.
 
J

James Coglan

[Note: parts of this message were removed to make it a legal post.]

class User
puts [].methods.size
puts self.methods.size
end


What does it mean to have [] method at a class level? Where is the
documentation for it?



Here, [] is just an empty array literal. [].methods.size returns the number
of public methods that an array has.
 
S

Serabe

2008/10/16 Raj Singh said:
What does it mean to have [] method at a class level? Where is the
documentation for it?

It is the empty array. Just type

[].class => Array
[].size => 0

Regards,

Serabe
 
J

Jesús Gabriel y Galán

class User
puts [].methods.size
puts self.methods.size
end


What does it mean to have [] method at a class level? Where is the
documentation for it?

[] is a literal for a new empty Array.

irb(main):001:0> [].object_id
=> -606116168
irb(main):002:0> [].object_id
=> -606126028
irb(main):003:0> [].object_id
=> -606134558
irb(main):004:0> [].class
=> Array

Jesus.
 
R

Raj Singh

I should have mentioned that I picked up the code from the source code
of named_scope.rb ( from rails). In rails the code is

[].methods.each do |m|
unless m =~
/(^__|^nil\?|^send|^object_id$|class|extend|^find$|count|sum|average|maximum|minimum|paginate|first|last|empty\?|respond_to\?)/
delegate m, :to => :proxy_found
end
end

[].methods was throwing me off.
 
C

Craig Demyanovich

[Note: parts of this message were removed to make it a legal post.]

[] is a way to declare an empty array. It's a nice alternative to Array.new.

puts [].methods.size

will print the number of methods on a new, empty Array instance. On my Ruby
install (1.8.6 p114 on Mac OS X 10.5.5), the output is 121.

Craig
 
R

Robert Klemme

2008/10/16 Raj Singh said:
What does it mean to have [] method at a class level? Where is the
documentation for it?

It is the empty array. Just type

[].class => Array
[].size => 0

It is not _the_ empty Array but _an_ empty Array. Things like [], ""
and '' are actually constructors for new objects. This is important to
keep in mind. Especially people coming from Java might get the wrong
impression, that

a = "foo"
b = "foo"

will create two variables pointing to the same object. In reality,
there are two variables pointing to two different objects. You can
easily see that from

$ ruby -e '4.times do p [[],"",'\'\''].map {|o|o.object_id} end'
[134314000, 134313990, 134313980]
[134313890, 134313880, 134313870]
[134313790, 134313780, 134313770]
[134313690, 134313680, 134313670]


Kind regards

robert
 
M

Mark Thomas

puts [].methods.size

A more explicit alternative is

puts Array.instance_methods.size

-- Mark.
 

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

Forum statistics

Threads
474,197
Messages
2,571,041
Members
47,643
Latest member
ashutoshjha_1101

Latest Threads

Top