Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

runtimemethods

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Perl runtimemethods

    Criação de Métodos em Runtime

    Num módulo é útil, por vezes, gerar métodos dinamicamente (em runtime). O Perl, por ser uma linguagem reflexiva, torna essa tarefa muito simples.

    No LaTeX::Writer::Simple, um módulo de que sou autor, uso geração dinâmica de métodos para vários comandos LaTeX. Segue-se um walkthrough.

    @EXPORT = (qw/document p/);

    Estes são os métodos convencionais, que são definidos no módulo.


    sub _def {
    my ($name, $sub) = @_;

    no strict 'refs';
    my $x = "LaTeX::Writer::Simple::$name";
    *$x = $sub;
    push @EXPORT, $name;
    }

    Este método _def é usado para definir um método em runtime: recebe o nome do método, e uma referência para um método anónimo. O que a função faz é criar um blob para o nome desse método (neste caso no módulo LaTeX::Writer::Simple), e associar-lhe a função. Por questões de princípio, o nome do método também é colocado no array de métodos exportados.

    Assim, torna-se simples definir métodos em tempo de execução, como no código seguinte:

    my @nl_commands = (qw/part chapter section subsection subsubsection caption/);
    for my $c (@nl_commands) {
    _def($c, sub { _c($c, @_)."\n" });
    }


    Já agora, _c é um método convencional usado para simplificar a escrita destas funções.
    Last edited by bolinhaxp; 18-12-2009, 19:27.
X
Working...
X