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
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

Poser une question


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).
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
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
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
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.
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