सबसे पहले: .sayकरता है नहीं , आप पहचान की मूल्य दे क्योंकि वह कहता .gistदी अभिव्यक्ति पर विधि। पहचान मूल्य के लिए, आपको .WHICHविधि को कॉल करने की आवश्यकता है । सौभाग्य से, Block.gistविधि करता है इसकी stringification में पहचान मूल्य शामिल हैं। लेकिन यह सभी वस्तुओं के मामले में होने की गारंटी नहीं है ।
आप वहां जो देख रहे हैं, वह काम पर स्टेटिक ऑप्टिमाइज़र है: क्योंकि ब्लॉक के अंदर कुछ भी नहीं हो रहा है, इसे खारिज किया जा सकता है। एक मामले में जहां यह अलग है (जहां एक वैकल्पिक हस्ताक्षर निर्दिष्ट) में, यह है अलग। आप के साथ इस स्क्रिप्ट को चलाने, तो --optimize=0या --optimize=1तो सभी ब्लॉक होगा अलग पहचान मान हैं।
मुझे लगता है कि आप इसे एक ऐसा मुद्दा कह सकते हैं जो उल्लेख &?BLOCKकरता है कि स्कोटलैस को स्थिर करने से स्टैटिक ऑप्टिमाइज़र को बाधित नहीं किया जाता है। दूसरी ओर, आप इसे DIHWIDT (डॉक्टर, इट हर्ट्स व्हेन आई डू डू) का मामला भी कह सकते हैं। तो ऐसा मत करो :-)
अद्यतन: यह अलग हस्ताक्षर है कि अंतर बना दिया है। डैनियल मीता ++