Primeiro de tudo: .sayse não dar-lhe o valor de identidade, pois que chama o .gistmétodo na expressão dada. Para o valor da identidade, você precisa chamar o .WHICHmétodo Felizmente, o Block.gistmé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=0ou --optimize=1, todos os blocos terão valores de identidade diferentes.
Eu acho que você poderia chamá-lo de um problema que mencionar &?BLOCKnã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 ++