पर मौजूद गैर-मौजूद विशेषता के लिए गेटर को आविष्कार करने वाला कॉल रेफैक्टर करते समय इसमें दौड़ें। प्राप्त करने के लिए कॉलप्रॉपर्टीज() हमारे सीपीयू उपयोग को तेज करने के कारण पैदा कर रहे थे। हमने जो खोजा है वह यह है कि यदि आपके पास एक संबद्ध विशेषता के बिना गेटटर है, तो जब आप प्रॉपर्टीज() प्राप्त करने के लिए कॉल करते हैं तो गेटर को 1000 बार से अधिक कहा जाता है। फिक्स/वर्कअराउंड स्पष्ट है और हम जानते हैं कि मेटाप्रोग्रामिंग के साथ इसका कुछ संबंध है लेकिन यह क्यों हो रहा है (ग्रोवी स्रोत में क्या बिंदु)? नीचे groovy स्क्रिप्ट कोड देखें:ग्रोवी getProperties() 1000 बार
class tester {
int count = 0
public getVar() {
println count++ + " getVar() called!"
return var
}
}
def t = new tester()
t.getProperties()
println "done!"
आपको 1000 बार से अधिक getVar() को देखना चाहिए। 1068 हमारे लिए सटीक होना चाहिए।
काफी अजीब है। मैंने बस ग्रोवी वेब कंसोल http://groovyconsole.appspot.com/ में यह कोशिश की और मुझे इसे 110 बार निष्पादित किया गया। –
यह इस पंक्ति के कारण होता है 'वापसी var'। यह वास्तव में 'getVar()' को रिकर्सन में ही आमंत्रित कर रहा है क्योंकि 'रिटर्न var'' वापसी वापसी वार() 'के रूप में समान है। जब तक ढेर बहती है तब तक यह गिनती को प्रिंट करता है। – dmahapatro
'वापसी var' समस्या है। –