Classe :: multimethods.

suporte multimethods e funcionamento sobrecarga em perl
Baixe Agora

Classe :: multimethods. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Perl Artistic License
  • Preço:
  • FREE
  • Nome do editor:
  • Damian Conway
  • Site do editor:
  • http://search.cpan.org/~dconway/

Classe :: multimethods. Tag


Classe :: multimethods. Descrição

Suporte multimethods e função sobrecarga em perl Classe :: Multimethods é um módulo Perl que oferece multimethod e sobrecarga de funções em Perl.synopsis # Importe a declaração multimethod Sub ... Use Classe :: Multimethods; # Declarar vários multimetodos chamados de encontro ... # 1. Faça isso se encontrar é chamado com um contêiner ref e uma consulta refrega ... Multimethod Find => (contêiner, consulta) => sub _ -> FindQuery ($ _ )}; # 2. Faça isso se achado for chamado com um contêiner ref e um exemplo de refrega ... Multimethod Encontrar => (contêiner, amostra) => sub {$ _ -> Localizar ($ _ )}; # 3. Faça isso se achado for chamado com um índice ref e uma palavra ref ... Multimethod Find => (index, word) => sub {$ _ -> lookup_word ($ _ )}; # 4. Faça isso se achado for chamado com um índice ref e um padrão QR // Multimethod Find => (index, regexp) => sub {$ _ -> lookup_rx ($ _ )}; # 5. Faça isso se achado for chamado com um índice ref e um escalar numérico Multimethod Find => (índice, '#') => sub {$ _ -> lookup_elem ($ _ )}; # 6. Faça isso se encontrar é chamado com um índice ref e um escalar não numérico Multimethod Find => (index, '$') => sub {$ _ -> lookup_str ($ _ )} ; # 7. Faça isso se achado for chamado com um índice refs e uma matriz desnecessária Ref # (Observe a chamada recursiva para o Multimetod Find Multimethod) Find => (Index, Array) => Sub {Local {Local _ , $ _)} @ {$ _ }}; # Configurar alguns objetos ... meu $ cntr = novo contêiner ('./datafile'); meu $ INDX = $ cntr-> get_index (); # ... e alguma herança ... @badword :: isa = qw (palavra); Meu $ Badword = New Badword ("Fubar"); # ... e exercê-los ... Imprimir Localizar ($ cntr, nova consulta («CPAN ou Perl ')); # Chamadas 1. Imprimir Localizar ($ cntr, novo exemplo ('por um comitê')); # Chamadas 2. Imprimir Localizar ($ Indx, Nova Palavra ('Açúcar')); # Chamadas 3. Imprimir Localizar ($ Indx, $ Badword); # Chamadas 3. Imprimir Localizar ($ Indx, QR / outro tijolo na parede /); # Chamadas 4. Imprimir Localizar ($ Indx, 7); # Chamadas 5. Imprimir Localizar ($ Indx, 'mas não faça isso'); # Chamadas 6. Imprimir Localizar ($DX, ); # Chama 7, # então 5 e 6.A classe: multimethod módulo exporta uma sub-rotina (multimethod) que pode ser usada para declarar outras sub-rotinas que são despachadas usando um algoritmo diferente da sub-rotina perl normal ou mecanismo de despacho de método. Despachado encontrando a sub-rotina nomeada de forma adequada no pacote atual (ou especificado) e chamando isso. Os métodos perl normais são despachados tentando encontrar a sub-rotina nomeada de forma adequada na embalagem na qual o objeto invocador é abençoado ou, falhando que, recursivamente procurando por ele nos pacotes listados no @isa arrays apropriado.class :: multimethods multimethods apropriados são despachado de forma bastante diferente. O mecanismo de despacho examina as classes ou tipos de cada argumento para o multimethod (chamando a Ref em cada) e determina a variante de correspondência "mais próxima" do multimethod, de acordo com os tipos de argumentos especificados nas definições das variantes (ver "Encontrar o "" multimethod "mais próximo para uma definição de" mais próximo "). O resultado é algo semelhante à sobrecarga de função de C ++, mas mais inteligente, já que multimethods levam em conta os relacionamentos de herança de cada argumento. Outra maneira de pensar no mecanismo é que realiza despacho polimórfico em todos os argumentos de um método, não apenas o primeiro. Requisitos: · Perl.


Classe :: multimethods. Software Relacionado