[Brasil-PM] O problema do "smart matching"

Nelson Ferraz nferraz em gmail.com
Segunda Abril 22 02:43:40 PDT 2013


> De lá pra cá, casos como esse geraram tanta discussão sobre qual seria o
> comportamento correto do smartmatch que muitas mudanças foram (e continuam
> sendo) feitas. Hoje o ~~ é controlado por uma dispatch table massiva
> chamada em tempo de execução com mais de 20 rotas recursivas (sim,
> recursivas) dependendo dos operandos. Você é capaz de dizer, por exemplo, o
> que acontece, ou o que deveria acontecer, quando fazemos %hash ~~ @array?
> Quer chutar, sem olhar o "perlop"? Nem eu
>

Desafio aceito. :)

Meu palpite era de que %hash ~~ @array retornaria true se todos os
elementos do array estivessem no hash, e vice-versa. Obviamente estava
errado: o verdadeiro significado é:

    "any ARRAY elements exist as HASH keys"

WTF? Em casos assim, acho melhor que a comparação gere um warning, ou mesmo
uma exceção fatal.

Nesses casos é melhor ser explícito, e escrever algo como grep { exists
$hash{$_} } @array; que é bastante claro.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/brasil-pm/attachments/20130422/3caff2c0/attachment-0001.html>


Mais detalhes sobre a lista de discussão Brasil-PM