[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Dynamically Create Class. (or. Why is eval() messy?

Patrick Li

8/20/2008 8:28:00 PM

Hi,
I'm trying to create a utility method that will automatically create a
class for me, given a classname. But I can't find a way around having to
use eval().

This is what I'm doing right now:

def createClass(className)
eval(<<-EOS)
#{className} = Class.new do
#bla bla bla
end
EOS
end

but I really don't like eval() and would like to avoid it, if at all
possible.

Is there a reason, that Ruby doesn't support something like this: Maybe
because it's inconsistent with something, or because it's really hard?

className = "MyClass"
methodName = "myMethod"

class *className
def *methodName
puts "yay!"
end
end

Also, I find eval() code really messy. Though I'm not sure why. I think
I don't like it, because my editor (IntelliJ) doesn't do syntax
highlighting for strings. Do you guys know of any editors that will
syntax highlight a eval() string for you?
--
Posted via http://www.ruby-....

2 Answers

Stefano Crocco

8/20/2008 8:40:00 PM

0

On Wednesday 20 August 2008, Patrick Li wrote:
> Hi,
> I'm trying to create a utility method that will automatically create a
> class for me, given a classname. But I can't find a way around having to
> use eval().
>
> This is what I'm doing right now:
>
> def createClass(className)
> eval(<<-EOS)
> #{className} = Class.new do
> #bla bla bla
> end
> EOS
> end
>
> but I really don't like eval() and would like to avoid it, if at all
> possible.
>

You're almost there. This works

def create_class name, mod = Object
cls = Class.new do
...
end
mod.constant_set name, cls
end

This allows to put the created class inside any module/class you like. If you
don't need it, simply remove it from the argument list and use Object in its
place inside the method.

I hope this helps

Stefano

Patrick Li

8/20/2008 8:44:00 PM

0

Ah =), that's quite lovely. Thank you.
Until you suggested that, I was almost contemplating switching to Lisp
or something.
--
Posted via http://www.ruby-....