exists pour une méthode ?

Le
CrazyCat
Bonjour,

Au sein d'un script, j'ai besoin de tester l'existence d'une méthode
d'un objet.
J'essaye avec exists() mais quelles que soient mes tentatives, j'ai
toujours:
exists argument is not a subroutine name at lib/GA/DBI.pm line 35.

Est-il possible de simplement faire ce test ?

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
espie
Le #20521431
In article
Bonjour,

Au sein d'un script, j'ai besoin de tester l'existence d'une méthode
d'un objet.
J'essaye avec exists() mais quelles que soient mes tentatives, j'ai
toujours:
exists argument is not a subroutine name at lib/GA/DBI.pm line 35.

Est-il possible de simplement faire ce test ?



Tous les objets heritent de UNIVERSAL, suffit de faire un can() pour
savoir si la methode est possible.

Si c'est pour faire de la delegation et creer des methodes au vol,
c'est plutot du ressort de la classe, et en general, suffit de
definir AUTOLOAD pour faire ce qu'on veut (attention a gerer
le cas particulier du destructeur).
CrazyCat
Le #20521521
Marc Espie wrote:
Au sein d'un script, j'ai besoin de tester l'existence d'une méthode
d'un objet.
J'essaye avec exists() mais quelles que soient mes tentatives, j'ai
toujours:
exists argument is not a subroutine name at lib/GA/DBI.pm line 35.

Est-il possible de simplement faire ce test ?


Tous les objets heritent de UNIVERSAL, suffit de faire un can() pour
savoir si la methode est possible.



Je vous prierais de ne pas m'insulter en des termes qui me sont incconus :D

Plus sérieusement, comment cela fonctionne-t-il ?

J'ai essayé:
if (can(OBJ->method)) et if (can(method))
Le premier passe la compilation mais pas l'exécution, le second me dit
"Bareword "method" not allowed while "strict subs" in use" Oublierais-je

Si c'est pour faire de la delegation et creer des methodes au vol,
c'est plutot du ressort de la classe, et en general, suffit de
definir AUTOLOAD pour faire ce qu'on veut (attention a gerer
le cas particulier du destructeur).



Non, il s'agit juste de déterminer si je suis dans un contexte ou un
autre, afin de gérer des fonctionnements différents.

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
CrazyCat
Le #20521681
CrazyCat wrote:
Tous les objets heritent de UNIVERSAL, suffit de faire un can() pour
savoir si la methode est possible.


J'ai essayé:
if (can(OBJ->method)) et if (can(method))
Le premier passe la compilation mais pas l'exécution, le second me dit
"Bareword "method" not allowed while "strict subs" in use" Oublierais-je



Je me réponds à moi même:
Avec OBJ->can('method') cela semble passer, est-ce correct ?

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
espie
Le #20521781
In article
CrazyCat wrote:
Tous les objets heritent de UNIVERSAL, suffit de faire un can() pour
savoir si la methode est possible.


J'ai essayé:
if (can(OBJ->method)) et if (can(method))
Le premier passe la compilation mais pas l'exécution, le second me dit
"Bareword "method" not allowed while "strict subs" in use" Oublierais-je



Je me réponds à moi même:
Avec OBJ->can('method') cela semble passer, est-ce correct ?



Ben oui. Comme je le disais, tout le monde herite de UNIVERSAL, donc suffit
d'appeler la methode can, qui existe toujours...

Accessoirement, comme toujours en perl, UNIVERSAL est documente, donc dans
le pire des cas, tu peux verifer sur la doc. Je me contentais de donner un
pointeur sur une info qui est facilement disponible (sachant qu'il n'est
pas forcement simple d'intuiter l'existence d'UNIVERSAL et d'UNIVERSAL::can
si on n'est pas au courant, mais qu'une fois qu'on sait, c'est censement
trivial).

Si ces trucs te posent des soucis, je ne saurais trop
de conseiller de lire ou relire perlboot, perltoot, et perltooc.
CrazyCat
Le #20521831
Marc Espie wrote:
Si ces trucs te posent des soucis, je ne saurais trop
de conseiller de lire ou relire perlboot, perltoot, et perltooc.



Merci de ces bons conseils. A force de passer d'un langage à l'autre, je
m'y perds un peu et les bonnes habitudes sont dures à reprendre, mais
elles reviennent.

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Publicité
Poster une réponse
Anonyme