-
-
01 Jan 2017 21:24:12 UTC
- Distribution: POD2-ES
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Repository
- Issues
- Testers (586 / 0 / 0)
- Kwalitee
Bus factor: 0- License: perl_5
- Activity
24 month- Tools
- Download (323.86KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
and 1 contributors- Equipo de Perl en Español
- Dependencies
- POD2::Base
- Pod::Perldoc
- Test::More
- and possibly others
- Reverse dependencies
- CPAN Testers List
- Dependency graph
NAME
perlmroapi - Interfaz del complemento de resolución de métodos de Perl
DESCRIPCIÓN
En Perl 5.10.1 se incluyó una nueva interfaz para conectar y usar órdenes de resolución de métodos distintos del predeterminado (búsqueda lineal en profundidad). El orden de resolución de métodos C3 agregado en 5.10.0 se ha reimplementado como un complemento sin cambiar su interfaz del espacio Perl.
Cada complemento debe registrarse a sí mismo proporcionando la siguiente estructura
struct mro_alg { AV *(*resolve)(pTHX_ HV *stash, U32 level); const char *name; U16 length; U16 kflags; U32 hash; };
y llamar a
Perl_mro_register
:Perl_mro_register(aTHX_ &mi_alg_mro);
- resolve
-
Puntero a la función de linealización, que se describe a continuación.
- name
-
Nombre del orden de resolución de métodos, codificado en ISO-8859-1 o UTF-8.
- length
-
Longitud del nombre.
- kflags
-
Si se proporciona el nombre codificado en UTF-8, debe establecer
HVhek_UTF8
como valor de kflags. El valor se pasa directamente como el parámetro kflags ahv_common()
. - hash
-
Un valor de hash calculado previamente para el nombre del orden de resolución de métodos, o bien 0.
Retrollamadas
La función
resolve
se llama para generar una relación ISA lineal para el hash de tabla de símbolos (o "stash", contracción de symbol table hash) indicado, con este orden de resolución de métodos. Se llama con un puntero al hash de tabla de símbolos, y un valor de level igual a 0. El núcleo siempre establece level en 0 cuando se llama a la función; el parámetro se proporciona para permitir que su implementación pueda realizar un seguimiento de la profundidad en caso de que tenga que funcionar de manera recursiva.La función debe devolver una referencia a un array con las clases primarias ordenadas. Los nombres de las clases deben ser el resultado de llamar a
HvENAME()
en el hash de tabla de símbolos. En aquellos casos en los queHvENAME()
devuelva un valor nulo, se debe usarHvNAME()
en su lugar.El código que llama debe encargarse de incrementar el contador de referencias del array devuelto si se quiere mantener la estructura. Por lo tanto, si ha creado un valor temporal al que no apunta ningún puntero, use
sv_2mortal()
para asegurarse de que se elimina de la manera correcta. Si almacenó en caché el valor devuelto, debe devolver un puntero a dicho valor sin cambiar el contador de referencias.Almacenamiento en caché
El cálculo de órdenes de resolución de métodos puede ser costoso. La implementación proporciona una caché en la que puede almacenar un único
SV *
, o cualquier cosa que se pueda convertir enSV *
, como unAV *
. Para leer el valor privado, use la macroMRO_GET_PRIVATE_DATA()
, pasándole la estructuramro_meta
del hash de tabla de símbolos, y un puntero a la estructuramro_alg
:meta = HvMROMETA(stash); private_sv = MRO_GET_PRIVATE_DATA(meta, &mi_alg_mro);
Para establecer el valor privado, llame a
Perl_mro_set_private_data()
:Perl_mro_set_private_data(aTHX_ meta, &alg_c3, private_sv);
La caché de datos privada se apropiará de una referencia a private_sv, de la misma manera que
hv_store()
asumirá la propiedad de una referencia al valor que le pase.Ejemplos
Si desea ver ejemplos de implementaciones de orden de resolución de métodos, consulte
S_mro_get_linear_isa_c3()
y la secciónBOOT:
de ext/mro/mro.xs; vea tambiénS_mro_get_linear_isa_dfs()
en mro_core.cAUTORES
La aplicación del orden de resolución de métodos C3 y los órdenes de resolución de métodos intercambiables del núcleo de Perl son obra de Brandon L. Black. Nicholas Clark creó la interfaz conectable, refactorizó la implementación de Brandon para trabajar con ella y redactó este documento.
TRADUCTORES
Joaquín Ferrero (Tech Lead)
Enrique Nell (Language Lead)
Module Install Instructions
To install POD2::ES, copy and paste the appropriate command in to your terminal.
cpanm POD2::ES
perl -MCPAN -e shell install POD2::ES
For more information on module installation, please visit the detailed CPAN module installation guide.