because:
harp:~ > irb
irb(main):001:0> class Foo;def foo;end;end
irb(main):002:0> p Foo::instance_methods - Object::instance_methods
["foo"]
irb(main):003:0> class Foo;def bar;end;end
irb(main):004:0> p Foo::instance_methods - Object::instance_methods
["bar", "foo"]
opening up a class, even in a file that's loaded, can only add or modify
methods using 'def'. there is a mechanism to delete methods but it must be
explicit.
for dynamically loading classes try this:
jib:~ > cat b.rb
require 'dynaload'
loaded = Dynaload::dynaload 'a.rb'
loaded.classes.each do |klass, attributes|
p [klass, attributes]
p klass.instance_methods - Object.instance_methods
end
jib:~ > cat a.rb
require 'dynaload'
class Foo
def foo
end
end
Dynaload::export Foo, 'some attribute' => 42
jib:~ > ruby b.rb
[#<Module:0xb75cded8>::Foo, {"some attribute"=>42}]
["foo"]
jib:~ > cat a.rb
require 'dynaload'
class Foo
def bar
end
end
Dynaload::export Foo, 'some attribute' => 42
jib:~ > ruby b.rb
[#<Module:0xb75cbed8>::Foo, {"some attribute"=>42}]
["bar"]
http://raa.ruby-lang.org/project/dynaload/
http://www.codeforpeople.com/lib/ruby/dynaload/
hth.
-a
···
On Fri, 12 Aug 2005, henrikbrink wrote:
Hello!
Im making an application that loads and uses the methods of a class
dynamically. The class can then be altered while the application is
running, and the application loads the file containing the class every
time it is needed.
The strange thing is: It works fine when i add a method to the class.
The new method shows up. But if i remove a method, it acts as if it was
still there. How can that be?
Here's the code used to get the methods:
load "#{file}.rb"
myclass = Object.const_get "MyClass"
myclass_inst = myclass.new
methods = myclass_inst.methods
If I am not clear enough, please ask.
Regards, Henrik
--
email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
Your life dwells amoung the causes of death Like a lamp standing in a strong breeze. --Nagarjuna
===============================================================================