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 :

[langage] Références dans hashtable


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut [langage] Références dans hashtable
    bonjour,

    ma question est simple mais pourtant je ne trouve pas de doc dessus.

    Comment peut on utiliser des references de fonctions dans une table de hash (aussi bien clef que valeur)

    merci
    a+

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    en clé c'est impossible (en fait ta clé sera la version stringifiée de la reference à la sub, genre "CODE(0x3453)")
    en valeur il suffit de mettre ta ref de sub:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $a{sub} = sub{print "ok"}
    ou bienet pour l'utiliser:

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut
    merci de la réponse

    et quand est t-il pour faire une référence vers une méthode d'un objet ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{clef} = \&$objet->method;
    donne
    Not a CODE reference

    Et s'il est impossible de mettre une reference vers fonction en clef, comment faire pour executer une fonction selon le code retour d'une autre ?

    a+

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    si tu veux mettre une methode il faut en tirer une ref de sub:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{clef} = $self->can('method');
    appel :ou bien en incluant $self dans une sub anonyme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{clef} = sub {$self->method(@_)};
    appel :pour ta seconde question je ne comprend pas exactement ce que tu veux faire.
    Decrit nous ton probleme exacte, car en fait il y a de fortes chances pour que ton approche ne soit pas la plus adaptée.

    par exemple pour appeler une methode quelconque sur un objet sais tu que tu utiliser une vairable comme methode ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $methode = 'blabla';
    $self->$methode();
    # equivalent à $self->blabla()

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 95
    Par défaut
    mh.. et pour mettre des paramètres a la fonction ? j'ai pas reussi..

    En fait, mon but est de faire une série de tests effectués par des fonctions diverse (une fonction, un test)

    En, parfois, en fonction du retour de la fonction, effectuer une action (executer une fonction) précise. En sachant qu'un test ne peut avoir qu'une action.

    C'est pour ca que je pensais a une table de hash dans laquelle une fonction était associée a une fonction

    a+

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    pour ajouter des arguments tu peux les mettre dans ta sub anonyme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{clef} = sub {$self->method(1,3,4)};
    pour ce qui est du retour de tes fonctions tu peux effectivement les mettre en clé de hash, mais ce ne seront que les pointeurs de fonction ("CODE(0x34334)"), donc tu ne pourra pas les executer, mais effectivement tu pourra les identifier (si ta fonction retourne la meme reference de fcontion que celle que tu a dans ta hash)

Discussions similaires

  1. [langage] Sauter une ligne en ecrivant dans un fichier
    Par mickey02 dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2005, 18h02
  2. Réponses: 2
    Dernier message: 05/10/2004, 22h43
  3. [langage] Ecrire un bloc de texte dans un fichier
    Par sarahbes dans le forum Langage
    Réponses: 6
    Dernier message: 10/06/2004, 11h40
  4. Réponses: 6
    Dernier message: 04/03/2004, 09h35

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