|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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" |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 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: http://ola-bini.blogspot.com/2006/09...echniques.html - -- Phillip Gawlowski -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEUEARECAAYFAkfzWNEACgkQbtAgaoJTgL9KhACfY0UzhdcpPe OYMYaOgjfUpT35 dAwAl3hEZTSDs6+M6U0givW4nk68iGU= =44gD -----END PGP SIGNATURE----- |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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: > > http://ola-bini.blogspot.com/2006/09...echniques.html > > -- Phillip Gawlowski |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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 --> 42 HTH Robert -- http://ruby-smalltalk.blogspot.com/ --- Whereof one cannot speak, thereof one must be silent. Ludwig Wittgenstein |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
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 --> 42 > > HTH > Robert |
|
![]() |
| Outils de la discussion | |
|
|