Apres avoir lu et relu la doc, je ne trouve aucun idiome qui
me permette d'avoir une reference sur methode, independamment
du package concerne (l'analogue du `pointer to member' de C++).
Plus precisement, si j'ai une fonction normale f, je sais que je
peux utiliser &f pour avoir une reference dessus.
Et je peux stocker ca quelque part pour mes appels:
f(args)
devient
my $r = &f; &$r(args);
Maintenant, si j'ai une methode m, que j'appelle par
$o->m(args);
je n'ai pas de construction similaire.
Je peux ecrire:
my $r='m'; $o->$r(args);
qui marche, meme avec use strict et use warnings, mais je soupconne
que c'est pas super-efficace...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Samuel Mouniée
Bonjour,
Marc Espie wrote:
J'ai besoin d'implementer un visitor.
Apres avoir lu et relu la doc, je ne trouve aucun idiome qui me permette d'avoir une reference sur methode, independamment du package concerne (l'analogue du `pointer to member' de C++).
Plus precisement, si j'ai une fonction normale f, je sais que je peux utiliser &f pour avoir une reference dessus. Et je peux stocker ca quelque part pour mes appels: f(args) devient my $r = &f; &$r(args);
Maintenant, si j'ai une methode m, que j'appelle par $o->m(args); je n'ai pas de construction similaire. Je peux ecrire: my $r='m'; $o->$r(args); qui marche, meme avec use strict et use warnings, mais je soupconne que c'est pas super-efficace...
Des idees ?
les fermetures et les methodes anonymes.
sinon :
$self->$methode( @args );
marche tres bien avec le bon contexte ;)
sinon reste le violent :
while( $sub = &$sub ) {};
et avec une couche objet adequat :
$sub = &$sub while $sub->isa( "subobject" );
.sn'uoM
Bonjour,
Marc Espie wrote:
J'ai besoin d'implementer un visitor.
Apres avoir lu et relu la doc, je ne trouve aucun idiome qui
me permette d'avoir une reference sur methode, independamment
du package concerne (l'analogue du `pointer to member' de C++).
Plus precisement, si j'ai une fonction normale f, je sais que je
peux utiliser &f pour avoir une reference dessus.
Et je peux stocker ca quelque part pour mes appels:
f(args)
devient
my $r = &f; &$r(args);
Maintenant, si j'ai une methode m, que j'appelle par
$o->m(args);
je n'ai pas de construction similaire.
Je peux ecrire:
my $r='m'; $o->$r(args);
qui marche, meme avec use strict et use warnings, mais je soupconne
que c'est pas super-efficace...
Apres avoir lu et relu la doc, je ne trouve aucun idiome qui me permette d'avoir une reference sur methode, independamment du package concerne (l'analogue du `pointer to member' de C++).
Plus precisement, si j'ai une fonction normale f, je sais que je peux utiliser &f pour avoir une reference dessus. Et je peux stocker ca quelque part pour mes appels: f(args) devient my $r = &f; &$r(args);
Maintenant, si j'ai une methode m, que j'appelle par $o->m(args); je n'ai pas de construction similaire. Je peux ecrire: my $r='m'; $o->$r(args); qui marche, meme avec use strict et use warnings, mais je soupconne que c'est pas super-efficace...
Des idees ?
les fermetures et les methodes anonymes.
sinon :
$self->$methode( @args );
marche tres bien avec le bon contexte ;)
sinon reste le violent :
while( $sub = &$sub ) {};
et avec une couche objet adequat :
$sub = &$sub while $sub->isa( "subobject" );
.sn'uoM
Paul Gaborit
À (at) Mon, 23 Aug 2004 10:13:28 +0000 (UTC), (Marc Espie) écrivait (wrote):
Apres avoir lu et relu la doc, je ne trouve aucun idiome qui me permette d'avoir une reference sur methode, independamment du package concerne (l'analogue du `pointer to member' de C++).
Plus precisement, si j'ai une fonction normale f, je sais que je peux utiliser &f pour avoir une reference dessus. Et je peux stocker ca quelque part pour mes appels: f(args) devient my $r = &f; &$r(args);
L'appel me semble plus clair avec cette syntaxe :
$r->(...args...);
Et, dans certains cas, cela évite les effets de bords de l'usage de &.
Maintenant, si j'ai une methode m, que j'appelle par $o->m(args); je n'ai pas de construction similaire. Je peux ecrire: my $r='m'; $o->$r(args); qui marche, meme avec use strict et use warnings, mais je soupconne que c'est pas super-efficace...
C'est pourtant la bonne façon de faire. Et ce n'est pas plus inefficace qu'autres choses (pour l'instant). Dans de futures versions de Perl, le compilateur pourra optimiser l'appel si il connait, à la compilation, le type de l'objet et le nom de la méthode mais ce n'est pas le cas encore (à ma connaissance).
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Mon, 23 Aug 2004 10:13:28 +0000 (UTC),
espie@tetto.gentiane.org (Marc Espie) écrivait (wrote):
Apres avoir lu et relu la doc, je ne trouve aucun idiome qui
me permette d'avoir une reference sur methode, independamment
du package concerne (l'analogue du `pointer to member' de C++).
Plus precisement, si j'ai une fonction normale f, je sais que je
peux utiliser &f pour avoir une reference dessus.
Et je peux stocker ca quelque part pour mes appels:
f(args)
devient
my $r = &f; &$r(args);
L'appel me semble plus clair avec cette syntaxe :
$r->(...args...);
Et, dans certains cas, cela évite les effets de bords de l'usage de &.
Maintenant, si j'ai une methode m, que j'appelle par
$o->m(args);
je n'ai pas de construction similaire.
Je peux ecrire:
my $r='m'; $o->$r(args);
qui marche, meme avec use strict et use warnings, mais je soupconne
que c'est pas super-efficace...
C'est pourtant la bonne façon de faire. Et ce n'est pas plus inefficace
qu'autres choses (pour l'instant). Dans de futures versions de Perl, le
compilateur pourra optimiser l'appel si il connait, à la compilation, le type
de l'objet et le nom de la méthode mais ce n'est pas le cas encore (à ma
connaissance).
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Mon, 23 Aug 2004 10:13:28 +0000 (UTC), (Marc Espie) écrivait (wrote):
Apres avoir lu et relu la doc, je ne trouve aucun idiome qui me permette d'avoir une reference sur methode, independamment du package concerne (l'analogue du `pointer to member' de C++).
Plus precisement, si j'ai une fonction normale f, je sais que je peux utiliser &f pour avoir une reference dessus. Et je peux stocker ca quelque part pour mes appels: f(args) devient my $r = &f; &$r(args);
L'appel me semble plus clair avec cette syntaxe :
$r->(...args...);
Et, dans certains cas, cela évite les effets de bords de l'usage de &.
Maintenant, si j'ai une methode m, que j'appelle par $o->m(args); je n'ai pas de construction similaire. Je peux ecrire: my $r='m'; $o->$r(args); qui marche, meme avec use strict et use warnings, mais je soupconne que c'est pas super-efficace...
C'est pourtant la bonne façon de faire. Et ce n'est pas plus inefficace qu'autres choses (pour l'instant). Dans de futures versions de Perl, le compilateur pourra optimiser l'appel si il connait, à la compilation, le type de l'objet et le nom de la méthode mais ce n'est pas le cas encore (à ma connaissance).
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>