[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Re: best way to dynamically create new instance methods

Gavin Kistner

12/11/2006 8:40:00 PM

From: Dan Tenenbaum
> Sent: Monday, December 11, 2006 1:28 PM
> To: ruby-talk ML
> Subject: best way to dynamically create new instance methods
[snip]
> What I want create_method() to do (simplified here) is, given the
> argument "baz", add a method to the current instance of Foo that would
> look like this if it were a traditional method (that is, not
> dynamically
> created):

Assuming that you want each instance of foo to have its own list of
methods:

class Foo
def initialize( *method_names )
method_names.each{ |meth_name|
create_method( meth_name )
}
end

def create_method( meth_name )
( class << self; self; end ).class_eval{
define_method( meth_name ){ |*args|
args[0]
}
}
end
end

f1 = Foo.new( :bar, 'baz' )
p f1.bar( 'a', 'b', 'c' )
#=> "a"

f2 = Foo.new( 'whee' )
p f2.whee( 'yahoo' )
#=> "yahoo"

p f2.bar
#=> undefined method `bar' for #<Foo:0x2833f90> (NoMethodError)