[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

what is [] here

Raj Singh

10/16/2008 1:59:00 PM

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?
--
Posted via http://www.ruby-....

8 Answers

Matthew Moss

10/16/2008 2:04:00 PM

0


On Oct 16, 2008, at 8:58 AM, Raj Singh 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.


James Coglan

10/16/2008 2:04:00 PM

0

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

Serabe

10/16/2008 2:13:00 PM

0

2008/10/16 Raj Singh <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

--
http://www....

Jesús Gabriel y Galán

10/16/2008 2:14:00 PM

0

On Thu, Oct 16, 2008 at 3:58 PM, Raj Singh <neeraj.jsr@gmail.com> 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.

Raj Singh

10/16/2008 2:15:00 PM

0

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.
--
Posted via http://www.ruby-....

Craig Demyanovich

10/16/2008 2:53:00 PM

0

[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

Robert Klemme

10/16/2008 2:57:00 PM

0

On 16.10.2008 16:13, Serabe wrote:
> 2008/10/16 Raj Singh <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

Mark Thomas

10/16/2008 3:10:00 PM

0

> puts [].methods.size

A more explicit alternative is

puts Array.instance_methods.size

-- Mark.