IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby Discussion :

Créer un nouvel objet avec le nom de la classe dans une variable ?


Sujet :

Ruby

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 24
    Points : 9
    Points
    9
    Par défaut Créer un nouvel objet avec le nom de la classe dans une variable ?
    Bonjour,
    J'ai vu une question similaire ici : http://www.developpez.net/forums/d43...ng-nom-l-attr/
    mais ça n'a pas l'air de fonctionner pour mon cas.

    Je veux aussi utiliser une variable (string) pour sélectionner une méthode ou une classe.
    Exemple :

    Je veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jason = Person.new
    attributs = "Attr_Person"
    jason.attributs = Attr_Person.new
    J'ai essayé (d'après les infos du sujet donné en haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jason = Person.new
    attributs = "Attr_Person"
    jason.attributs = send(attributs).new
    mais je pense que send() n'est pas fait pour ça, ça ne fonctionne pas.

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    Bonjour, tu peux faire comme ça, je sais pas si c'est "super propre" mais ça doit marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jason = Person.new
    attributs = "Attr_Person.new"
    jason.attributs = eval(attributs)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Merci bien v.charlet
    J'y avais pensé mais je me souviens aussi qu'on m'ait dit que "eval" = evil .. lol
    J'ai trouvé un autre moyen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object::const_get(attributs).new
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object.const_get(attributs).new

    En reprenant ton exemple (que je n'ai pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jason = Person.new
    attributs = "Attr_Person"
    jason.attributs = eval(attributs).new
    Il fonctionne.

    ceci va me permettre de pouvoir créer des objets dynamiquement avec une liste de nom de classes.

  4. #4
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    Juin 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : Juin 2013
    Messages : 138
    Points : 231
    Points
    231
    Par défaut
    Pitié pas de eval

    Essayez avec send et const_get, testez bien que les méthodes existent et faites pas trop de magie : c'est pas terrible niveau perf et sécurité.

    Je ne suis pas sûr d'avoir compris le besoin, hésite pas à détailler ton but de départ, il y a sûrement de meilleures solutions.

    ++,

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    attributs = "NomDeTaClasse"
    attributs.constantize.new
    normalement ça fonctionne, je l'utilise de cette façon.

    http://apidock.com/rails/String/constantize

Discussions similaires

  1. Créer un nouvel objet à partir du nom de la classe de l'objet
    Par gueuldange dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/04/2015, 21h37
  2. "enregistrer.sous" avec un nom de fichier récupéré dans une variable
    Par mauriceguillier dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/10/2010, 14h49
  3. Requète SQL avec nom de table contenu dans une variable
    Par samoussa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/05/2009, 13h58
  4. [Reflect] Créer un array d'objets avec le nom de leur classe
    Par Onarap dans le forum API standards et tierces
    Réponses: 18
    Dernier message: 12/06/2006, 12h24
  5. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo