Demander à l'utilisateur de definir le nom d'un objet

Demander à l'utilisateur de definir le nom d'un objet - Ruby/Rails - Programmation

Marsh Posté le 18-05-2011 à 10:23:13    

Bonjour, à tous!
 
Je suis tout nouveau ici donc:  :jap: ET nouveau sur ruby donc: :jap: ^2
Je n'ai pas trouvé de réponse ailleurs, ni dans des tuto ni sur les forums...
 
Voila mon probleme: je souhaite demander à l'utilisateur de définir le nom d'un objet (d'une instance de classe pour etre precis).
 
Exemple simple:
 

Code :
  1. class Adresse
  2.     attr_reader :rue
  3.     def initialize
  4.         @rue
  5.     end
  6. end


 
Puis  
 

Code :
  1. adresse = Adresse.new


 
SAUF que je veux que se soit l'utilisateur qui definisse que Adresse.new s'appelle adresse.
J'ai essayé toutes les combinaisons possibles avec gets mais je ne dois pas bien m'y prendre... A tel point que je commence à douter que ce soit possible (si c'est le cas je suis preneur d'une idée pour arriver au même résultat d'une autre façon of course!) :sweat:  
 
Des idées??
 

Reply

Marsh Posté le 18-05-2011 à 10:23:13   

Reply

Marsh Posté le 18-05-2011 à 10:40:47    

Tu veux que l'utilisateur choisisse le nom de la variable à laquelle sera affectée ta création d'objet, c'est ça ?
Si oui, tu viens sûrement de PHP et il n'y a pas de bonne justification à ce besoin, dis nous plutôt pourquoi tu penses avoir besoin de ce mécanisme.

Reply

Marsh Posté le 18-05-2011 à 10:49:01    

Salut,

 

Quel est le but exactement? Parce que je vois pas du tout l'utilité d'un tel truc pour être franc..
Edit: Grilled..


Message édité par esox_ch le 18-05-2011 à 10:49:27

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-05-2011 à 11:19:47    

Bonjour bonjour,
 
Dsl si je m'exprime en langage de béotien mais on fait ce qu'on pneu.
 
L'idée est d'avoir plusieurs instance du'une même classe (Adresse ici) que l'on pourrai appeler individuelement (adresse_de_bob par exemple) et que l'on puisse lister toutes les instances.
J'ai essayé avec un @name sauf que si le nom de l'objet et la valeur du @name sont différente ca fout le boxon...
En short je voudrai que le nom de l'objet soit le même que son @name ou pouvoir le stocker qqpart. typiquement quand je fais ca avec le @name, je liste les @name (ok) je demande à l'utilisateur lequel il veut charger et là, vu qu'il tombe sur l'objet qui a un nom différent de son @name (loi de Murphy oblige) ca ne marche pas...

Reply

Marsh Posté le 18-05-2011 à 11:29:40    

A moins qu'il existe une méthode pour browser les instances existantes d'une classe donné (cherché, pas trouvé, même si ca simplifierai bien mon pb) ou d'y faire référence par son  @name...

Reply

Marsh Posté le 18-05-2011 à 11:34:09    

Ce que tu veux c'est un tableau, éventuellement un dictionnaire clé => valeur où la clé serais le nom de ton adresse (?) et la valeur ta référence vers l'objet créé. C'est quoi ton soft, un site RoR ou un programme en ligne de commande ? Comment tu obtiens ton identifiant d'adresse ?

Reply

Marsh Posté le 18-05-2011 à 11:34:34    

Je n'ai toujours pas compris ce que tu veux faire. Pourquoi ne pas garder toutes tes instances dans un Array?
Edit: Je commence à en avoir marre de me faire griller :o


Message édité par esox_ch le 18-05-2011 à 11:35:01

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-05-2011 à 11:49:49    

@LeRiton: exactement! je veux pouvoir accéder aux objets via leur nom (adresse ici). Je suis en ligne de commande (pour l'instant). Comment je fais ça? (je vais chercher juste apres avoir posté ce message mais si tu te sens d'expliquer gentiment à un newbie comment faire tu serai un a-mour =)  
Encore une fois je ne sais pas comment acceder à "la reference vers l'objet créé"... je crois que c'est ca mon probleme (Cf being a noob) =)
l'idée originale (au sens de premiere et non de nouvelle) c'etait de demander à l'utilisateur comment il voulait l'appeler et de faire un gets.chomp.to_whatever...
 
@esox_ch: d'apres ce que j'ai compris tu propose la même solution (encore que je peux me tromper?). même question. EDIT: mais oui dans l'idée c'est exactement ce que je veux faire, je sais juste pas comment faire =)


Message édité par sleeping_banana le 18-05-2011 à 11:57:30
Reply

Marsh Posté le 18-05-2011 à 11:59:46    

Supposons que Address contient un champ name (en plus de ton street d'après ce que j'ai compris), et que le tout te soit donné à la création par l'utilisateur.

 

De ton côté, tu fais

 
Code :
  1. adresse = Adresse.new # j'imagine que tu passes les paramètres reçus comme le nom et la rue au constructeur
 

ce qui stock dans une variable address la nouvelle instance. A chaque création, rien ne t'empêche de stocker cette nouvelle instance dans un tableau, soit par exemple après ta création

 
Code :
  1. ton_tableau_adresses << adresse
 

et au moment où tu as besoin de quelque chose, tu vas le chercher dans ton tableau

 
Code :
  1. ton_tableau_adresses.each { |address|
  2.    address if address.name == name
  3. }
 

ou un truc du style, j'ai pas d’interpréteur sous la main.

 

Edit : esox_ch [:hahaguy]


Message édité par LeRiton le 18-05-2011 à 12:05:33
Reply

Marsh Posté le 18-05-2011 à 12:21:57    

Moui moui moui
résumons:
 
l'utilisateur fais

Code :
  1. adresse= Adresse.new


il doit aussi faire  

Code :
  1. ton_tableau_adresses << adresse


ou bien je peux l'incorporer dans mon programe (ce que je voudrai pouvoir faire dans l'absolu). si c'est le cas, comment je récupère le "adresse"?
 
voila comment je voyais les choses avant de jeter cette bouteille à la mer:
 

Code :
  1. #dans un main pas encore écrit
  2. puts "Créer une nouvelle adresse. Nom?"
  3. nom=gets.chomp.to_s
  4. >adresse
  5. #{nom}=Adresse.new
  6. mon_tableau_d'adresses.push #{nom}
  7. #qui, dans un monde parfait créerai l'objet adresse, instance de la classe Adresse. sauf que évidement la syntaxe #{} ne fonctionne pas comme ca, et que si j'utilise:
  8. puts "Créer une nouvelle adresse. Nom?"
  9. nom=gets.chomp.to_s
  10. >adresse
  11. nom=Adresse.new
  12. mon_tableau_d'adresse.push nom
  13. #ca me crée un objet nom instance de Adresse, au lieu d'un objet adresse, vu que j'ai réassigné la variable/objet nom...


...
voila voila
je pense qu'il y a un truc que j'ai loupé parceque ca me parrait évident que il y a plein de gens qui doivent utiliser ca tout le temps... non?
 
   

Reply

Marsh Posté le 18-05-2011 à 12:21:57   

Reply

Marsh Posté le 18-05-2011 à 13:21:15    

sleeping_banana a écrit :

l'utilisateur fais


Non, c'est écrit dans le source de ton programme, comme le reste des "instructions".

sleeping_banana a écrit :


Code :
  1. adresse= Adresse.new


il doit aussi faire  

Code :
  1. ton_tableau_adresses << adresse


ou bien je peux l'incorporer dans mon programe (ce que je voudrai pouvoir faire dans l'absolu). si c'est le cas, comment je récupère le "adresse"?


Les deux lignes de codes sont dans ton programme, je vois pas où elles pourraient être autrement d'ailleurs. Comment récupérer "adresse" : bin c'est la variable que tu as défini à la ligne précédente.
 

Reply

Marsh Posté le 18-05-2011 à 14:47:39    

okaaaaaaaaaaaaaaay :D
merci de ta patience, je suis un peu lent à la détente... ca doit etre la digestion... ou les bonbons japonais que mon frere ma ramené ils brillaient dans le noir...
 
bon. donc en gros tu suggere de tout mettre dans un hash ?
 
J'ai testé ca a l'air de faire ce que je veux... (c'est aussi ce que esox_ch suggerai, je vais essayer de faire comme ca
 
 (je reviendrai t'em####er si je peux pas faire autrement  :pt1cable: )
 
Merci beaucoup en tout cas!  :jap:  :jap:  
 
PS: si tu as encore deux minutes, je veux bien que tu m'explique pourquoi de temps en temps irb me renvoie tout un tas de répertoires... genre:
 

Code :
  1. irb(main):583:2*
  2. .ICEauthority              .esd_auth                  .gstreamer-0.10/           .netx/                     .themes/                   Images/
  3. .adobe/                    .evolution/                .gtk-bookmarks             .netxrc                    .thumbnails/               Modèles/
  4. .bash_history              .fontconfig/               .gvfs/                     .openoffice.org/           .update-manager-core/      Musique/
  5. .bash_logout               .gconf/                    .icons/                    .pki/                      .update-notifier/          Public/
  6. .bashrc                    .gconfd/                   .java/                     .profile                   .xine/                     Téléchargements/
  7. .cache/                    .gem/                      .kde/                      .pulse/                    .xsession-errors           Vidéos/
  8. .codeblocks/               .gksu.lock                 .local/                    .pulse-cookie              .xsession-errors.old       backup.log
  9. .config/                   .gnome2/                   .macromedia/               .recently-used.xbel        Bureau/                    examples.desktop
  10. .dbus/                     .gnome2_private/           .mozilla/                  .ssh/                      Desktop/                   testdisk.log
  11. .dmrc                      .gnupg/                    .nautilus/                 .sudo_as_admin_successful  Documents/


Reply

Marsh Posté le 18-05-2011 à 15:40:42    

Joker, j'utilise pas (plus, et très peu avant) IRB :D

Reply

Marsh Posté le 18-05-2011 à 16:07:47    

Tu utilises quoi? un IDE?

Reply

Marsh Posté le 19-05-2011 à 06:59:45    

En fait tu serais même pas obliger de le rajouter toi même à l'array en faisant une Factory mais bon c'est un peu compliqué et overkill si le problème est juste d'éviter d'écrire adresses << adresse; :D
 
Et pourquoi tu parles de mettre ça dans un Hash? L'ordre a une importance? Parce que là LeRiton t'a fait voir comment le mettre dans un array
 
Pour irb: C'est parce que tu as tapé "tab" sur ton clavier, et donc ça a le même effet que dans Bash :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 19-05-2011 à 13:51:10    

Comment je fais un truc un peu propre sans utiliser de tabulation?
 
L'ordre n'a pas particulierement d'importance, et effectivmement un tableau ca marche tres bien =D
 
c'est quoi le principe des factory?

Reply

Marsh Posté le 19-05-2011 à 13:54:31    

Bein tu utilises des Singleton :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed