Definition dynamique d'objets | |
reboltof | 21-Jun-2014/19:42:51+2:00 |
Bonjour, Je cale sur le problème suivant... Je dispose d'un base de données du personnel. Chaque personne de cette DB est identifiée par un "alias" unique (dans le champ no 3). J'ai défini un prototype d'objet. Je souhaite pour chaque personne de la DB, créer dynamiquement un objet ayant pour nom cet alias. Je pensais à: foreach record db [ alias: to-word copy record/3 :alias: make prototype [] ] Mais cela ne fonctionne pas Des suggestions ? Merci d'avance, les Reboleurs ! | |
GreG | 23-Jun-2014/9:44:45+2:00 |
Hello, J'avoue ne pas comprendre la ligne: :alias: make prototype [] Qu'est-ce que c'est censé faire? | |
DideC | 23-Jun-2014/11:50:28+2:00 |
Salut, Réponse basique (que vous pouvez tester dans la console) : prototype: make object! [nom: prenom: none] db: [["Durand" "Paul" "Paulo"] ["Martin" "Philippe" "Phil"]] foreach record db [ alias: to-word record/3 set :alias make prototype [nom: record/1 prenom: record/2] ] Et donc on peut faire ensuite : >> probe phil make object! [ nom: "Martin" prenom: "Philippe" ] >> probe paulo make object! [ nom: "Durand" prenom: "Paul" ] Mais tout ça créé des mots dans le contexte globale ce qui peut être embêtant (imaginons que le nom d'alias soit "if", "print" ou "copy" !!!). De plus, m'étant déjà posé la question, quel est l’intérêt de créer des mots pour chaque enregistrement ? Humainement, dans la console, c'est pratique, mais pour un programme qui manipule ces données, est-ce intéressant ?? Un programme va manipuler, 1 voir 2 enregistrements (pour l'éditer, le modifier, les échanger...), ou toute la base. Du coup il est plus intéressant de se créer un block et d'accéder au éléments du block. prototype: make object! [nom: prenom: none] db: [["Durand" "Paul" "Paulo"] ["Martin" "Philippe" "Phil"]] aliases: [] foreach record db [ append aliases reduce [to-word record/3 make prototype [nom: record/1 prenom: record/2]] ] ;probe aliases On peut alors le manipuler: [/code]; liste des alias : liste-alias: extract aliases 2 ; Accès à un alias (ici le 2ème) : alias: pick liste-alias 2 probe select aliases alias ; ou encore : probe aliases/:alias ; Modif du nom aliases/:alias/nom: "Martinot"[/code] Une autre question à se poser : est-il nécessaire de créer des objets pour les éléments de la DB ? Souvent, ce n'est pas intéressant, car il n'y a que des données (et pas de code) et on peut utiliser un block de ['champ1 "valeur1" 'champ2 "valeur2 ...] qui se manipule souvent de la même façon : aliases: [] foreach record db [ append aliases reduce [to-word record/3 reduce ['nom record/1 'prenom record/2]] ] probe aliases liste-alias: extract aliases 2 alias: pick liste-alias 2 probe select aliases alias probe aliases/:alias aliases/:alias/nom: "Martinot" probe aliases Bonne réflexion | |
ldci | 26-Jun-2014/22:04:55+2:00 |
Bravo DideC Limpide comme toujours | |
reboltof | 27-Jun-2014/21:28:57+2:00 |
@Greg: une tentative manquée de faire <pre>set :alias make prototype []</pre> | |
reboltof | 27-Jun-2014/21:30:38+2:00 |
@DideC: Wow ! Merci pour cette explication très complète. Que de la matière à réflexion. Je m'y met ! | |
Login required to Post. |