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

Langage Perl Discussion :

[Débutant] Tableaux et classes


Sujet :

Langage Perl

  1. #1
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut [Débutant] Tableaux et classes
    Bonjour,

    J'ai déjà ouvert un sujet sur les tableaux, mais le problème ici est légèrement différent...
    La question est comment modifier un tableau qui est un element d'une classe ?
    Je m'explique :
    Soit une classe avec un constructeur. Un des éléments de la classes est un tableau double :

    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sub new {
        my ($classe, $fichier) = @_;
    	my @tabParam;
    	$tabParam[0][0] = 'nom';
    	$tabParam[0][1] = 'type';
    	Utils->printDoubleTable(@tabParam);
        my $self = {
            nomFichier => $fichier,
            listeParam => @tabParam
        };
        Utils->printDoubleTable($self->{listeParam});
        return(bless($self, $classe));
    }

    Et une méthode. Avec cette méthode, je souhaite rajouter des éléments dans le tableau.

    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    	print ("Debut de la fonction ajoutParam\n");
    	my ($this, $nomParam, $type) = @_;
    	print ("1 \n");
    	Utils->printDoubleTable($this->{listeParam});
    	my @tabParam = $this->{listeParam};
    	print("test : " . $tabParam[0][1] . "\n");
    	print ("2 \n");
    	Utils->printDoubleTable(@tabParam);
    	my $nbParam = scalar(@tabParam);
     
    	print("nomParam=$nomParam - type=$type - nbParam:" . $nbParam . "\n");
     
    	$tabParam[$nbParam][0] = $nomParam;
    	$tabParam[$nbParam][1] = $type;
    	print ("3 \n");
    	Utils->printDoubleTable(@tabParam);
    	$this->{listeParam} = @tabParam;
    	print ("4 \n");
    	Utils->printDoubleTable($this->{listeParam});
     
    	print ("Fin de la fonction ajoutParam\n");

    Pour information, Utils->printDoubleTable est une méthode que j'ai codé pour connaitre le contenu de mon tableau.

    Quand j'appelle ajoutParam, je voudrai rajouter $this->{listeParam} deux lignes. Le problème, c'est que je ne peux pas acceder directement à $this->{listeParam}[1][0] par exemple, pour rajouter mon element.
    Je peux par contre, récuperer $this->{listeParam} dans un tableau et faire l'affectation. Par contre, après, ce nouveau tableau, je ne peux plus l'affecter a $this->{listeParam}.

    Les logs me donnent ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Debut de la fonction ajoutParam
    1 
    Dans la fonction printDoubleTable
    tab[0][0]=nom
    tab[0][1]=type
    test : type
    2 
    Dans la fonction printDoubleTable
    tab[0][0]=nom
    tab[0][1]=type
    nomParam=CODE - type=N - nbParam:1
    3 
    Dans la fonction printDoubleTable
    tab[0][0]=nom
    tab[0][1]=type
    tab[1][0]=CODE
    tab[1][1]=N
    4 
    Dans la fonction printDoubleTable
    Can't use string ("2") as an ARRAY ref while "strict refs" in use at class_utils.pl line 58.
    Notez le résultat du Utils->printDoubleTable($this->{listeParam}); qui donne le contenu du tableau au départ et plus rien apres l'affectation...

    Bref, pour résumer, comment est-ce que je peux modifier un tableau élément d'une classe ?
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Il y a déjà un problème dans la fonction de création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $self = {
            nomFichier => $fichier,
            listeParam => @tabParam
        };
    devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $self = {
            nomFichier => $fichier,
            listeParam => \@tabParam
        };
    Ensuite, la fonction d'ajout devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub addParam {
      my ($self, @params) = @_;
      push @{$self->{listeParam}}, \@params;
    }
    ou quelque chose comme ça.

    --
    Jedaï

  3. #3
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Nickel, ca marche !

    En fait, ce qui me manquait vraiment, c'est la syntaxe @{$this->{listeParam}} pour acceder a mon tableau.
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutante]utiliser les classes css pour surligner des liens
    Par Mitaka dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 06/01/2006, 09h37
  2. Réponses: 13
    Dernier message: 09/06/2005, 11h28
  3. [Débutant(e)]Erreur 'class' or 'interface' expect
    Par chevy dans le forum Général Java
    Réponses: 7
    Dernier message: 30/03/2005, 08h13
  4. [Débutant(e)] toString + classes abstraites
    Par debdev dans le forum Langage
    Réponses: 9
    Dernier message: 26/01/2005, 15h22
  5. [Débutant]Déterminer la classe d'un objet
    Par Wisefool dans le forum Langage
    Réponses: 4
    Dernier message: 06/05/2004, 12h55

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