Spitfire
(Spitfire)
1
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
Robert_K1
(Robert K.)
2
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
···
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?
Robert_K1
(Robert K.)
4
Robert Klemme 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
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
···
On 25.12.2006 20:44, Spitfire wrote:
On 25.12.2006 19:37, Spitfire wrote:
from :0
Spitfire
(Spitfire)
5
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