[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Re: class << Array vs. Array.class

James Coglan

8/21/2008 1:32:00 PM

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

> Hello,
>
> i just wondered where the difference between the following code parts is?
>
> ---- code ----
>
> class << Array
> p self.inspect
> define_method :foo do
> p "inside foo"
> end
> end
>
> Array.class.module_eval do
> p self.inspect
> define_method :bar do
> p "inside bar"
> end
> end
>
> Array.foo
> Array.bar
>
> ---- output ----
>
> "#<Class:Array>"
> "Class"
> "inside foo"
> "inside bar"
>

Array.class is equal to Class -- all classes are instances of Class. So, the
second one actually adds an instance method :bar to Class, so *all* classes
get that method:

String.bar
#=> "inside bar"

If you only want to modify Array, leave out the '.class'



Array.module_eval do
p self.inspect #=> "Array"
def self.bar
"inside class method bar"
end

def bar
"inside instance method bar"
end
end

Array.bar
#=> "inside class method bar"
[].bar
#=> "inside instance method bar"



or try the following...

(class << Array; self; end).module_eval do
p self.inspect
define_method :bar do
p "inside bar"
end
end