मेरे पास कुछ कोड है जिसमें इस बात का आविष्कार है कि उस वस्तु में एक वस्तु का निर्माण किया जाना चाहिए जहां अंततः इसका उपयोग किया जाता है (वैश्विक राज्य से संबंधित विभिन्न कारणों से जो आदर्श नहीं हैं लेकिन कुछ हिस्सा हैं धारणा का)।कंस्ट्रक्टर कॉल के स्थान के लिए स्कैला संकलन समय की जांच
उदा। मान लीजिए कि नीचे फंक्शन बू है जो म्यू में हेरफेर करने के लिए ज़िम्मेदार है।
def boo(mooGen:() => Moo) {
val m = mooGen() // a new MOO must be created HERE
m.moo()
}
बू के ग्राहकों कि बू उपयोग करना चाहते हैं() => मू, जहां समारोह उत्पन्न करता वांछित मू एक प्रकार में से गुजरना होगा।
आदर्श ग्राहक व्यवहार:
boo(() => new Moo(// specific parameters here))
मू
बू शरीर के अंदर तक नहीं बनाया गया है।
हालांकि, एक ग्राहक आसानी से निम्न कोड के साथ गलत कदम कर सकते हैं:
val myMoo = new Moo(// specific parameters here)
boo(() => myMoo)
यह अपरिवर्तनीय है जहाँ हम मू निर्माण केवल बू में होते देखना चाहते टूट जाता है।
तो मूल रूप से, मैं यह निर्धारित करना चाहता हूं कि फ़ंक्शन के कॉल स्टैक के भीतर mooGen का वापसी मूल्य बनाया गया है या फिर इसे पहले से बनाया गया था या नहीं।
रनटाइम पर इसे सत्यापित करने के कई तरीके हैं। हालांकि, संकलन समय पर इस पैटर्न को मजबूर करने का कोई तरीका है? Implicits या कुछ और चालाक का उपयोग कर?
किसी भी विचार की सराहना की जाती है!