Re: Dynamically changing class methods
- From: "Ara.T.Howard" <Ara.T.Howard@xxxxxxxx>
- Date: Fri, 12 Aug 2005 01:00:56 +0900
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
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
--
===============================================================================
| 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 ===============================================================================
.
- Follow-Ups:
- Re: Dynamically changing class methods
- From: henrikbrink
- Re: Dynamically changing class methods
- References:
- Dynamically changing class methods
- From: henrikbrink
- Dynamically changing class methods
- Prev by Date: Re: Ruby,Rails mentioned in Salon article
- Next by Date: Re: Ruby readline - completion based on already-entered commands
- Previous by thread: Re: Dynamically changing class methods
- Next by thread: Re: Dynamically changing class methods
- Index(es):
Relevant Pages
|