Define_method

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!?

Any help appreciated!

Thanks,
Malcolm.

def selfclass
    (class << self; self; end)
  end

  class TestClass
    def initialize
      selfclass.send(:define_method, "hello") { || puts "Hello" }
    end
  end

  x = TestClass.new
  x.hello

···

On Nov 6, 11:37 pm, "Malcolm Lockyer" <maxpeng...@gmail.com> wrote:

Hi Guys,

I am trying to use define_method like:

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.

Here's an example how to use it.
http://www.ruby-doc.org/core/classes/Module.html#M001677

Best,
Jake

···

On Nov 6, 2007, at 10:37 PM, Malcolm Lockyer wrote:

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!?

Any help appreciated!

Thanks,
Malcolm.

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

···

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!?

--
use.inject do |as, often| as.you_can - without end

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
>
>

Please do not top post.

···

On 07.11.2007 22:19, Malcolm Lockyer wrote:

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:

http://raa.ruby-lang.org/search.rhtml?search=enum

Kind regards

  robert