What is [] here


#1

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?


#2

On Oct 16, 2008, at 8:58 AM, Raj S. wrote:

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.


#3

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.


#4

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.


#5

On Thu, Oct 16, 2008 at 3:58 PM, Raj S. removed_email_address@domain.invalid wrote:

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.


#6

2008/10/16 Raj S. <neeraj.jsr@…>:

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


#7

[] 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


#8

On 16.10.2008 16:13, Serabe wrote:

2008/10/16 Raj S. <neeraj.jsr@…>:

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


#9

puts [].methods.size

A more explicit alternative is

puts Array.instance_methods.size

– Mark.