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”
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Martin B. 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:
iEUEARECAAYFAkfzWNEACgkQbtAgaoJTgL9KhACfY0UzhdcpPeOYMYaOgjfUpT35
dAwAl3hEZTSDs6+M6U0givW4nk68iGU=
=44gD
-----END PGP SIGNATURE-----
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
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 Wed, Apr 2, 2008 at 11:18 AM, Martin B. [email protected] wrote:
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs