[Perl] equivalencia de un case

Gunnar Wolf gwolf@campus.iztacala.unam.mx
Wed, 13 Mar 2002 09:59:01 -0600 (CST)


(...)
> > A m=ED me gusta abundar un poco en esto, si vas a pasar seguido por est=
a
> > construcci=F3n:
> > %tipo =3D ( 'a' =3D> sub { print "Es de tipo A\n"; },
> >           'b' =3D> sub { print "No, no me gusta...\n"; },
> >           'c' =3D> sub { otraCosa(1,2); } );
> >
> > Y cuando lo requieras, la llamas as=ED:
> >
> > &{$tipo{$expr}};
>
> Pues abundemos ;-)
>
> Primero, ya s=E9 que adoras el &, pero creo que es m=E1s claro si usas:
>
>    $tipo{$expr}->()

jejeje :) Bueno, cuando estamos hablando de referencias hay que indicar de
lo que hablas, no? :) Ni se me ocurri=F3 tu manera.

> Dos, y m=E1s importante, los "closures" son herramientas poderosas, pero
> hay que tener cautela al usarlos:
> (...)
> Si lo que quieres en un "despachador de funciones", es mejor en t=E9rmino=
s
> de eficiencia, y se usa igual, hacer un hash de referencias simples a
> funciones, aunque escribas m=E1s:
> (...)
> %dispatch =3D ( 'a' =3D> \&func1, 'b' =3D> \&func2, ... );
> $dispatch{$selector}->(...);
>
> O incluso puedes hacer algunos jueguitos con namespaces:
>
> sub MyDisp::a { ... }
> sub MyDisp::b { ... }

Ya, ya entiendo... Bueno, a corregir un par de lugares donde lo he usado
:)

Rara vez aplica mejor... 'Ad hoc, ad loc and quid pro quo. So little time,
so much to know!' :)

Gracias por la luz :)

--=20
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF