Прежде всего: .say
это НЕ даст вам значение идентификатора, потому что вызывает .gist
метод на данном выражении. Для значения идентификатора вам нужно вызвать .WHICH
метод. К счастью, Block.gist
метод действительно включает значение идентификатора в его stringification. Но это не гарантируется для всех объектов.
Что вы видите, так это статический оптимизатор в действии: поскольку внутри блока ничего не происходит, его можно отбросить. В одном случае , когда он отличается (где вы указали дополнительную подпись), то есть разная. Если вы запустите этот скрипт с помощью --optimize=0
или --optimize=1
, то все блоки будут иметь разные значения идентичности.
Я думаю, вы могли бы назвать это проблемой, упоминание &?BLOCK
которой не мешает статическому оптимизатору сгладить область видимости. С другой стороны, вы также можете назвать это случаем DIHWIDT (Доктор, мне больно, когда я это делаю). Так что не делай этого тогда :-)
ОБНОВЛЕНИЕ: это другая подпись, которая имела значение. Даниэль Мита ++