[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

dynamic changes!

Spitfire

12/25/2006 6:37:00 PM

These are the sequence of actions I performed in irb.

class Dumber
def sayHello
puts "Hello!"
end
end

db = Dumber.new()

db.sayHello
## executes sayHello method!

Class Dumber
def sayHi
puts "Hi"
end
end

db.sayHi
## executes the newly added method sayHi!

how does the object already created aware of the newly added method?


--
_ _ _]{5pitph!r3}[_ _ _
__________________________________________________
?I'm smart enough to know that I'm dumb.?
- Richard P Feynman
4 Answers

Robert Klemme

12/25/2006 7:37:00 PM

0

On 25.12.2006 19:37, Spitfire wrote:
> These are the sequence of actions I performed in irb.
>
> class Dumber
> def sayHello
> puts "Hello!"
> end
> end
>
> db = Dumber.new()
>
> db.sayHello
> ## executes sayHello method!
>
> Class Dumber
> def sayHi
> puts "Hi"
> end
> end
>
> db.sayHi
> ## executes the newly added method sayHi!
>
> how does the object already created aware of the newly added method?

The method is added to it's *class* - and that relationship does not
change, only the class changes.

$ irb
irb(main):001:0> class Dumber
irb(main):002:1> def say_hello() puts "hello" end
irb(main):003:1> end
=> nil
irb(main):004:0> Dumber.instance_methods.grep /^say_/
=> ["say_hello"]
irb(main):005:0> Dumber.object_id
=> 1913790
irb(main):006:0> class Dumber
irb(main):007:1> def say_hi() puts "hi" end
irb(main):008:1> end
=> nil
irb(main):009:0> Dumber.instance_methods.grep /^say_/
=> ["say_hi", "say_hello"]
irb(main):010:0> Dumber.object_id
=> 1913790

As you see, Dumber stays the same instance, there are no multiple
versions of it.

Kind regards

robert

Spitfire

12/25/2006 7:44:00 PM

0

Robert Klemme wrote:
> On 25.12.2006 19:37, Spitfire wrote:
>> These are the sequence of actions I performed in irb.
>>
>> class Dumber
>> def sayHello
>> puts "Hello!"
>> end
>> end
>> db = Dumber.new()
>>
>> db.sayHello
>> ## executes sayHello method!
>>
>> Class Dumber
>> def sayHi
>> puts "Hi"
>> end
>> end
>>
>> db.sayHi
>> ## executes the newly added method sayHi!
>>
>> how does the object already created aware of the newly added method?
>
> The method is added to it's *class* - and that relationship does not
> change, only the class changes.

It's class? I'm sorry I don't understand what you are saying. Can you
please clarify?

--
_ _ _]{5pitph!r3}[_ _ _
__________________________________________________
?I'm smart enough to know that I'm dumb.?
- Richard P Feynman

Robert Klemme

12/25/2006 7:51:00 PM

0

On 25.12.2006 20:44, Spitfire wrote:
> Robert Klemme wrote:
>> On 25.12.2006 19:37, Spitfire wrote:
>>> These are the sequence of actions I performed in irb.
>>>
>>> class Dumber
>>> def sayHello
>>> puts "Hello!"
>>> end
>>> end
>>> db = Dumber.new()
>>>
>>> db.sayHello
>>> ## executes sayHello method!
>>>
>>> Class Dumber
>>> def sayHi
>>> puts "Hi"
>>> end
>>> end
>>>
>>> db.sayHi
>>> ## executes the newly added method sayHi!
>>>
>>> how does the object already created aware of the newly added method?
>>
>> The method is added to it's *class* - and that relationship does not
>> change, only the class changes.
>
> It's class? I'm sorry I don't understand what you are saying. Can you
> please clarify?

Sorry, should have read "its class". Please look closely at the IRB
session to understand what I mean:

irb(main):001:0> class Foo
irb(main):002:1> def m1() end
irb(main):003:1> end
=> nil
irb(main):004:0> Foo.object_id
=> 1917050
irb(main):005:0> Foo.instance_methods.grep /m\d/
=> ["m1"]
irb(main):006:0> f=Foo.new
=> #<Foo:0x381468>
irb(main):007:0> f.class
=> Foo
irb(main):008:0> f.class.object_id
=> 1917050
irb(main):009:0> f.m1
=> nil
irb(main):010:0> f.m2
NoMethodError: undefined method `m2' for #<Foo:0x381468>
from (irb):10
from :0
irb(main):011:0> class Foo
irb(main):012:1> def m2() end
irb(main):013:1> end
=> nil
irb(main):014:0> Foo.object_id
=> 1917050
irb(main):015:0> Foo.instance_methods.grep /m\d/
=> ["m2", "m1"]
irb(main):016:0> f.class
=> Foo
irb(main):017:0> f.class.object_id
=> 1917050
irb(main):018:0> f.m1
=> nil
irb(main):019:0> f.m2
=> nil

robert

Spitfire

12/25/2006 8:13:00 PM

0

Robert Klemme wrote:
> Sorry, should have read "its class". Please look closely at the IRB
> session to understand what I mean:
>
> irb(main):001:0> class Foo
> irb(main):002:1> def m1() end
> irb(main):003:1> end
> => nil
> irb(main):004:0> Foo.object_id
> => 1917050
> irb(main):005:0> Foo.instance_methods.grep /m\d/
> => ["m1"]
> irb(main):006:0> f=Foo.new
> => #<Foo:0x381468>
> irb(main):007:0> f.class
> => Foo
> irb(main):008:0> f.class.object_id
> => 1917050
> irb(main):009:0> f.m1
> => nil
> irb(main):010:0> f.m2
> NoMethodError: undefined method `m2' for #<Foo:0x381468>
> from (irb):10
> from :0
> irb(main):011:0> class Foo
> irb(main):012:1> def m2() end
> irb(main):013:1> end
> => nil
> irb(main):014:0> Foo.object_id
> => 1917050
> irb(main):015:0> Foo.instance_methods.grep /m\d/
> => ["m2", "m1"]
> irb(main):016:0> f.class
> => Foo
> irb(main):017:0> f.class.object_id
> => 1917050
> irb(main):018:0> f.m1
> => nil
> irb(main):019:0> f.m2
> => nil
>
> robert
>
Sorry, didn't observe the IRB session closely. It's clear, now.

--
_ _ _]{5pitph!r3}[_ _ _
__________________________________________________
?I'm smart enough to know that I'm dumb.?
- Richard P Feynman