Is it possible to create classes with a dynamic name? Example:
name = "Test"
class name # this fails
def write
puts "TEST"
end
end
puts Object::const_get(name).new.write # => "TEST"
Is it possible to create classes with a dynamic name? Example:
name = "Test"
class name # this fails
def write
puts "TEST"
end
end
puts Object::const_get(name).new.write # => "TEST"
Martin Boese wrote:
Is it possible to create classes with a dynamic name? Example:
name = "Test"
class name # this fails
def write
puts "TEST"
end
endputs Object::const_get(name).new.write # => "TEST"
Yes. Here is an overview on metaprogramming, and two ways to create
classes dynamically:
- -- Phillip Gawlowski
sure
c = Class::new {
def a; 41 end
}
d = Class::new(c) {
def a; super.succ end
}
d.new.a --> 42
HTH
Robert
On Wed, Apr 2, 2008 at 11:18 AM, Martin Boese <boesemar@gmx.de> wrote:
Is it possible to create classes with a dynamic name? Example:
name = "Test"
class name # this fails
def write
puts "TEST"
end
endputs Object::const_get(name).new.write # => "TEST"
--
http://ruby-smalltalk.blogspot.com/
---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein
No... I mean the 'Name' of a class or module (that what you get with
object.class.name). The doc of Class::new (ri) describes how it works:
You can give a class a name by assigning the class object to a constant.
...but still that doesn't allow me to set the initial name when _defining_ the
class.
I am aware that this can be done using eval with the complete class definition
as a string - which is also not what I want.
The reason is to avoid name clashes of a larger program. So I am thinking of
using some central instance to assign names and address specific types of
classes.
Martin
On Wednesday 02 April 2008 10:58:52 Phillip Gawlowski wrote:
Martin Boese wrote:
> Is it possible to create classes with a dynamic name? Example:
>
> name = "Test"
>
> class name # this fails
> def write
> puts "TEST"
> end
> end
>
> puts Object::const_get(name).new.write # => "TEST"Yes. Here is an overview on metaprogramming, and two ways to create
classes dynamically:Ola Bini: Programming Language Synchronicity: Ruby Metaprogramming techniques
-- Phillip Gawlowski
Thanks, that's what I was looking for.
That example of mine now works:
name = 'Test'
Object::const_set(name.intern, Class::new do
def write
puts "TEST"
end
end
)
Object::const_get(name).new.write # writes => "TEST"
martin
On Wednesday 02 April 2008 12:19:33 Robert Dober wrote:
On Wed, Apr 2, 2008 at 11:18 AM, Martin Boese <boesemar@gmx.de> wrote:
> Is it possible to create classes with a dynamic name? Example:
>
> name = "Test"
>
> class name # this fails
> def write
> puts "TEST"
> end
> end
>
> puts Object::const_get(name).new.write # => "TEST"sure
c = Class::new {
def a; 41 end
}
d = Class::new(c) {
def a; super.succ end
}
d.new.a --> 42HTH
Robert