You are getting this error since define_method is defined in Module not Object. Your object needs to call define_method against it's Class definition, not self.
Is this really your use case? Since you know which method you define,
you can do it with a normal def anyway. So I suspect that you are
doing something else. What exactly is it?
Hey, thanks for the replies guys, I am pretty noob with ruby so thanks
for your help.
Yes Robert, that wasn't my use case - that was just the most
simplified code that shows the problem I was having. I didn't want to
bore you all with loads of irrelevant code. If you are interested I
was trying to build a dynamic enumeration style class (vaguely similar
to java or c#'s way of doing it), where I could have the pseudo
constant (i.e. TestClass.Blue, TestClass.Red etc.) setup by calling
the constructor something like TestClass.new(:Blue => 1, :Red => 2
etc.) and also be able to iterate through the keys and stuff.
Anyway, thanks again for your help guys.
Malcolm
···
On 11/8/07, Malcolm Lockyer <malcolm@endev.co.nz> wrote:
Hey, thanks for the replies guys, I am pretty noob with ruby so thanks
for your help.
Yes Robert, that wasn't my use case - that was just the most
simplified code that shows the problem I was having. I didn't want to
bore you all with loads of irrelevant code. If you are interested I
was trying to build a dynamic enumeration style class (vaguely similar
to java or c#'s way of doing it), where I could have the pseudo
constant (i.e. TestClass.Blue, TestClass.Red etc.) setup by calling
the constructor something like TestClass.new(:Blue => 1, :Red => 2
etc.) and also be able to iterate through the keys and stuff.
Anyway, thanks again for your help guys.
Malcolm
On 11/8/07, Robert Klemme <shortcutter@googlemail.com> wrote:
> 2007/11/7, Malcolm Lockyer <maxpenguin@gmail.com>:
> > Hi Guys,
> >
> > I am trying to use define_method like:
> >
> > class TestClass
> > def initialize
> > define_method("hello") { || puts "Hello" }
> > end
> > end
> >
> > x = TestClass.new
> > x.hello
> >
> > I am always getting:
> > NoMethodError: undefined method `define_method'
> >
> > Do I need to require something? Am I doing something wrong, or am I
> > completely missing the boat!?
>
> Is this really your use case? Since you know which method you define,
> you can do it with a normal def anyway. So I suspect that you are
> doing something else. What exactly is it?
>
> Kind regards
>
> robert
>
> --
> use.inject do |as, often| as.you_can - without end
>
>
Yes Robert, that wasn't my use case - that was just the most
simplified code that shows the problem I was having. I didn't want to
bore you all with loads of irrelevant code. If you are interested I
was trying to build a dynamic enumeration style class (vaguely similar
to java or c#'s way of doing it), where I could have the pseudo
constant (i.e. TestClass.Blue, TestClass.Red etc.) setup by calling
the constructor something like TestClass.new(:Blue => 1, :Red => 2
etc.) and also be able to iterate through the keys and stuff.
In case you are not doing it for the fun of it and / or are looking for more inspirations this is a good place to look: