Перш за все: .sayце НЕ дасть вам значення ідентифікатора, тому що викликає .gistметод на даному вираженні. Для значення ідентичності потрібно викликати .WHICHметод. На щастя, Block.gistметод так і є включає значення ідентичності в його строфікацію. Але це не гарантовано стосується всіх об'єктів.
Те, що ви там бачите, - це статичний оптимізатор на роботі: оскільки всередині блоку нічого не відбувається, його можна відкинути. В одному випадку , коли він відрізняється (де ви вказали додаткову підпис), то є різна. Якщо ви запускаєте цей скрипт з --optimize=0або --optimize=1, то всі блоки матимуть різні значення ідентичності.
Я думаю, ви можете назвати це проблемою, що згадування &?BLOCKне перешкоджає статичному оптимізатору розгладжувати область. З іншого боку, ви можете також назвати це випадком DIHWIDT (Лікар, боляче, коли я це роблю). Тож не робіть цього тоді :-)
ОНОВЛЕННЯ: саме підпис змінив свою різницю. Даніель Міта ++