Primeiro de tudo: .say
se não dar-lhe o valor de identidade, pois que chama o .gist
método na expressão dada. Para o valor da identidade, você precisa chamar o .WHICH
método Felizmente, o Block.gist
método faz incluir o valor de identidade em sua stringification. Mas isso não é garantido para todos os objetos.
O que você vê lá é o otimizador estático em funcionamento: como nada está acontecendo dentro do bloco, ele pode ser descartado. No caso em que é diferente (onde você especificou uma assinatura alternativa), é diferente. Se você executar esse script com --optimize=0
ou --optimize=1
, todos os blocos terão valores de identidade diferentes.
Eu acho que você poderia chamá-lo de um problema que mencionar &?BLOCK
não inibe o otimizador estático de achatar o escopo. Por outro lado, você também pode chamar isso de DIHWIDT (Doutor, dói quando eu faço isso). Então não faça isso :-)
ATUALIZAÇÃO: é a assinatura diferente que fez a diferença. Daniel Mita ++