मैं कुछ कोड डीबग करने की कोशिश कर रहा था जो मिश्रणों का उपयोग करता है और मैं इस उदाहरण में अपनी समस्या को कम करने में सक्षम था। मेरे पास एक अभिभावक वर्ग है जो एक मिश्रण और एक बच्चे वर्ग के माध्यम से विधियों को प्राप्त करता है जो माता-पिता से विरासत में मिलता है। अगर मैं बच्चा वर्ग यह काम करता है का एक उदाहरण पर एक विधि को बदलने का प्रयास विधि है कि मैं कर रहा हूँ की जगह से पहले ही बदल दिया जाता है माता पिता वर्ग का एक उदाहरण पर बुलाया गया था नहीं कर देते। यह तो कहा गया है अगर मैं बदल नहीं सकते यहग्रोवी यहां क्या कर रहा है?
तो यह कोड:
class M {
protected foo() { println 'foo' }
}
@Mixin(M) class A {
def bar() { foo() }
}
class B extends A {}
def b = new B()
def a = new A()
a.bar() //<-- comment out this line and see the difference
b.metaClass.foo = {println 'winning'}
b.bar()
निकलेगा:
foo
foo
लेकिन अगर आप लाइन 13 पर टिप्पणी करते हैं (टिप्पणी के साथ एक टिप्पणी जो इसे टिप्पणी करने के लिए कहता है) आपको मिलेगा:
ऐसा क्यों होता है जीत? मुझे उम्मीद है कि ग्रोवी के मेटाक्लास मॉडल के संदर्भ में यह कुछ समझ में आता है, लेकिन मुझे यह नहीं मिला।
यह ग्रूवी 1.8.6
मैं ग्रोवी 1.8.4 में इसे पुन: पेश कर सकते हैं। मुझे एक बग की तरह बदबू आ रही है; लेकिन मैं ग्रोवी मेटा प्रोग्रामिंग में बहुत ज्यादा नहीं हूं, इसलिए मुझे नहीं पता। – epidemian
नोट के लिए धन्यवाद, मुझे यह सुनिश्चित करना होगा कि अगर मैं उस पर एक बग दर्ज कर रहा हूं। – mfollett
मैं इसे groovy उपयोगकर्ता मेलिंग सूची पर पूछूंगा, मुझे एक बग की तरह बदबू आ रही है ... –