Ito ang command na perlmroapi na maaaring patakbuhin sa OnWorks na libreng hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator
PROGRAMA:
NAME
perlmroapi - Perl method resolution plugin interface
DESCRIPTION
Mula sa Perl 5.10.1 mayroong isang bagong interface para sa pag-plug at paggamit ng mga order ng resolution ng pamamaraan
maliban sa default (linear depth unang paghahanap). Idinagdag ang order ng resolution ng C3 method
sa 5.10.0 ay muling ipinatupad bilang isang plugin, nang hindi binabago ang interface ng Perl-space nito.
Dapat irehistro ng bawat plugin ang sarili nito sa pamamagitan ng pagbibigay ng sumusunod na istraktura
struct mro_alg {
AV *(*resolve)(pTHX_ HV *stash, U32 level);
const char *pangalan;
haba ng U16;
U16 kflag;
U32 hash;
};
at pagtawag sa "Perl_mro_register":
Perl_mro_register(aTHX_ &my_mro_alg);
malulutas nito
Pointer sa linearization function, na inilarawan sa ibaba.
pangalan
Pangalan ng MRO, alinman sa ISO-8859-1 o UTF-8.
haba
Haba ng pangalan.
mga kflag
Kung ang pangalan ay ibinigay sa UTF-8, itakda ito sa "HVhek_UTF8". Direktang ipinapasa ang halaga bilang
ang parameter mga kflag sa "hv_common()".
sumira
Isang precomputed hash value para sa pangalan ng MRO, o 0.
Mga Callback
Ang function na "resolve" ay tinatawag upang bumuo ng isang linearised ISA para sa ibinigay na itago, gamit
itong MRO. Ito ay tinatawag na may isang pointer sa itago, at a antas ng 0. Ang core ay palaging nagtatakda
antas hanggang 0 kapag tinawag nito ang iyong function - ang parameter ay ibinigay upang payagan ang iyong
pagpapatupad upang subaybayan ang lalim kung kailangan itong maulit.
Ang function ay dapat magbalik ng isang reference sa isang array na naglalaman ng mga parent class sa pagkakasunud-sunod.
Ang mga pangalan ng mga klase ay dapat na resulta ng pagtawag sa "HvENAME()" sa itago. Sa
ang mga kaso kung saan ang "HvENAME()" ay nagbabalik ng null, "HvNAME()" ang dapat gamitin sa halip.
Ang tumatawag ay responsable para sa pagtaas ng bilang ng sanggunian ng array na ibinalik kung ito
gustong panatilihin ang istraktura. Kaya naman, kung nakagawa ka ng pansamantalang halaga na pananatilihin mong hindi
pointer sa, "sv_2mortal()" upang matiyak na ito ay itinapon ng tama. Kung naka-cache ka
ang iyong ibinalik na halaga, pagkatapos ay ibalik ang isang pointer dito nang hindi binabago ang bilang ng sanggunian.
Caching
Maaaring magastos ang pag-compute ng mga MRO. Ang pagpapatupad ay nagbibigay ng isang cache, kung saan maaari mong
mag-imbak ng isang "SV *", o anumang bagay na maaaring i-cast sa "SV *", gaya ng "AV *". Upang basahin
ang iyong pribadong halaga, gamitin ang macro na "MRO_GET_PRIVATE_DATA()", ipasa ito sa "mro_meta"
istraktura mula sa itago, at isang pointer sa iyong "mro_alg" na istraktura:
meta = HvMROMETA(stash);
private_sv = MRO_GET_PRIVATE_DATA(meta, &my_mro_alg);
Upang itakda ang iyong pribadong halaga, tawagan ang "Perl_mro_set_private_data()":
Perl_mro_set_private_data(aTHX_ meta, &c3_alg, private_sv);
Ang cache ng pribadong data ay magkakaroon ng pagmamay-ari ng isang reference sa private_sv, sa parehong paraan
na ang "hv_store()" ay tumatagal ng pagmamay-ari ng isang reference sa halagang ipapasa mo dito.
Mga halimbawa
Para sa mga halimbawa ng mga pagpapatupad ng MRO, tingnan ang "S_mro_get_linear_isa_c3()" at ang "BOOT:"
na seksyon ng mro/mro.xs, at "S_mro_get_linear_isa_dfs()" sa mro.c
MGA AUTHORS
Ang pagpapatupad ng C3 MRO at switchable MROs sa loob ng perl core ay isinulat ni
Brandon L Black. Nilikha ni Nicholas Clark ang pluggable na interface, ni-refactor ang kay Brandon
pagpapatupad upang gumana dito, at isinulat ang dokumentong ito.
Gumamit ng perlmroapi online gamit ang mga serbisyo ng onworks.net