En primer lugar: .say
no no le dan el valor de identidad, ya que llama al .gist
método en la expresión dada. Para el valor de identidad, debe llamar al .WHICH
método. Afortunadamente, el Block.gist
método hace incluirá el valor de identidad en su stringification. Pero no se garantiza que sea el caso para todos los objetos.
Lo que ves allí es el optimizador estático en funcionamiento: como no sucede nada dentro del bloque, se puede descartar. En el caso en que es diferente (donde especificó una firma alternativa), es diferente. Si ejecuta este script con --optimize=0
o --optimize=1
, todos los bloques tendrán diferentes valores de identidad.
Supongo que podría llamarse un problema que mencionar &?BLOCK
no impide que el optimizador estático aplaste el alcance. Por otro lado, también podría llamar a esto un caso de DIHWIDT (Doctor, duele cuando hago esto). Entonces no hagas eso entonces :-)
ACTUALIZACIÓN: es la firma diferente que marcó la diferencia. Daniel Mita ++