From: Rudolf Polzer Date: 2003-03-15T03:02:08+09:00 Subject: dynamically create a method Is there a possiblilty to dynamically create a method, like this? Fixnum.create_method(:power) do |a| self ** a end or - perhaps easier: Fixnum.create_method('power') do |me, a| me ** a end I tried to implement such a create_method, but all I came up with was a solution using a global array of method objects: def Object.add_method(name, m) $methods ||= [] $methods << m module_eval "def #{name}(*args); $methods[#{$methods.length() - 1}].call(self, *args); end" end Fixnum.add_method 'square_plus', proc { |me, x| me * me + x } I certainly don't like this hack. It would be great to have this if one wants to implement something along the lines of Perl's autoloader. In the missing_method method, one would read in the method one wants to add (or dynamically create it) and add it to the class. Oh... an autoloader can be done differently, by having the "method files" look like MyClass.meth0.al: class MyClass def meth0() # ... end end MyClass.foo.al: class MyClass def foo() # ... end end But I'd still like to know how to dynamically create a method with a dynamically given name. If possible, without such a hackery. Is that possible? -- [mpg123d] Just playing: .../ayumi hamasaki/a best/01 a song for xx.mp3 Das Erzeugen von C-Code ist sehr fehlerhaft und klappt nur bei ganz einfachen Programmen. [Alvar Freude in de.comp.lang.perl.misc]