[SP-pm] Duvida primaria
Nilson Santos Figueiredo Jr.
acid06 at gmail.com
Thu Oct 21 05:48:07 PDT 2010
2010/10/21 russoz at gmail.com <russoz at gmail.com>:
> Similarmente, a inicialização das tabelas de lookup/dispatch (qualquer
> flavour) NÃO fazem parte do bloco de código.
> Ou, falando de outra forma: sim, você está certo, faz diferença em diversos
> casos. But then again, se você escolhe um caso mal-codificado com dispatch e
> compara com um bem-codificado com given/when, não é exatamente algo muito
> justo, é? :-)
Não é questão de mal ou bem codificado, é uma questão de necessidade.
Sempre que você precise, por algum motivo, executar algum de N casos
de código em que o código em si depende do escopo atual, você não
poderia declarar a dispatch table de fora. Por exemplo, você está
escrevendo uma função que retorna funções que usa variáveis do escopo
local no closure.
Exemplo esdrúxulo mas que talvez ilustre o tipo de caso de uso que
estou falando:
<code>
sub tag_generator {
my ($tag_name, $style) = @_;
given ($style) {
when ('html') {
return sub {
my $content = shift // '';
"<$tag_name>$content</$tag_name>"
}
}
when ('xml') {
return sub {
my $content = shift // '';
"<$tag_name" . ( length $content ?
">$content</$tag_name>" : "/>" )
}
}
}
}
my $tag_html = tag_generator('tag', 'html');
my $tag_xml = tag_generator('tag', 'xml');
print $tag_html->("");
print $tag_xml->("");
</code>
-Nilson
More information about the SaoPaulo-pm
mailing list