Indexation en Ruby - Ruby/Rails - Programmation
Marsh Posté le 26-11-2013 à 22:36:16
A la ligne 19, ça plante. Si tu veux utiliser la << comme une méthode dans de la classe StringIndexer il faut déclarer le module comme ça :
Code :
|
A la ligne 21 tu auras un autre crash, parce que a4 n est pas initialisé.
A la ligne 23, tu n'as pas encore défini each donc ça ne marchera pas quand le programme fonctionnera enfin jusqu'à cette ligne.
Marsh Posté le 27-11-2013 à 08:47:49
czh a écrit : A la ligne 19, ça plante. Si tu veux utiliser la << comme une méthode dans de la classe StringIndexer il faut déclarer le module comme ça :
|
Merci pour le coup de main,
J'ai effectué les changement hier et maintenant tous fonctionne bien mais rien ne s'affiche
Mais je pense que c'est plus un soucis de compréhension du sujet.
Encore merci
Marsh Posté le 27-11-2013 à 21:33:11
De nouveaux moi,
Je suis presque au bout du premier chapitre de mon code.
J'ai l'impression que tout fonctionne correctement sauf mon affichage
Pour commencer voici mon code :
Code :
|
Au niveau du block de code pour l'appel de la méthode each a1.each{ |i| puts i }, j'avou avoir du mal à comprendre ce que je doit mettre à l'intérieur... Car lors de l'itération si les noeuds sont bien effectués cela devrait m'afficher a2 et a3 (en mode non récursif )
sauf que voilà ce que ça m'affiche
#<StringIndexer:0x000000026aad40>
#<StringIndexer:0x000000026aacf0>
Merci de votre aide
Marsh Posté le 02-12-2013 à 10:20:02
puts i c'est l'équivalent de puts i.to_s, c'est à dire un appelle de la méthode to_s (to string) sur ton objet.
Ici, l'implémentation de la méthode est celle de la classe Object, vu que tu ne la redéfini pas dans StringIndexer. Le to_s de Object t'affiche l'adresse mémoire de la référence vers ton objet, ce que tu vois en sortie.
Si tu veux donner un nom à tes instances de StringIndexer, tu dois le stocker dans ton objet, et redéfinir to_s.
Marsh Posté le 02-12-2013 à 10:32:00
Bonjour,
Merci pour la réponse,
Si j'ai compris je doit redéfinir to_s dans ma classe pour qu'il puisse lire directement mon objet et non son adresse mémoire?
Marsh Posté le 02-12-2013 à 10:40:11
C'est l'idée.
Maintenant il faut aussi que tu définisse ce que to_s devra afficher. De ce que je comprend de ton problème, tu voudras afficher le nom de ton nœud, donc il faut qu'à un moment donné (la création de l'objet au hasard), tu le lui donnes, et que tu le stockes dans une variable. C'est la valeur de cette variable que retournera ton to_s.
Marsh Posté le 02-12-2013 à 10:42:26
Oki,
Merci pour l'explication, surtout que je crois bien que c'est l'idée du prochain point de ce projet.
Marsh Posté le 26-11-2013 à 20:34:56
Bonjour,
Pour mes cours de Ruby je doit refaire la commande tree.
Voici l'explication de mon prof
Le module Tree doit implémenter la méthode each qui sert à itérer simplement sur les enfants d'un noeud.
Comme la plupart des méthodes each en Ruby (Array, Hash...) elle prend en paramètre un code block (cf fin du module 2) qui sera appelé pour chacun des enfants. En + de ce code block, elle prend un paramètre optionnel (Boolean) qui va lui indiquer si elle doit itérer sur les enfants de ce noeud uniquement, ou bien aussi sur les petits-enfants etc récursivement.
Voici un exemple d'utilisation du module Tree sur une classe A, avec un exemple d'utilisation de la méthode each:
La je bloque avec ce code
lorsque je compile j'ai cette erreur : indexation.rb:27:in `<main>': undefined method `<<' for #<StringIndexer:0x00000001d50948> (NoMethodError)
---------------
Made you your own sentence without believing that of the others...