OCaml

2010-12-17 14 views
5

में वर्तमान मॉड्यूल का संदर्भ क्या वर्तमान मॉड्यूल पर रेफर करने के लिए this जैसे किसी भी प्रकार का कीवर्ड है? उदाहरण के लिए, क्या मैं यहाँ खाई में डाल दिया जाना चाहिए:OCaml

module Test: Test_Type = 
struct 

    module N = Test_Outside(___);; 

end;; 

कहाँ Test_Outside एक और मॉड्यूल Test_Type द्वारा parameterized है।

उत्तर

5

नहीं, ऐसा नहीं है, लेकिन यह अजीब है कि आपको इसकी आवश्यकता है।

आप रिकर्सिव मॉड्यूल (बेस भाषा का विस्तार) के साथ अजीब चाल करने में सक्षम हो सकते हैं, लेकिन संभवतः समस्या चीजों को बनाने के तरीके में समस्या है, और आपको वास्तव में ऐसे आत्म-संदर्भ की आवश्यकता नहीं है।

पुनरावर्ती मार्ग जा रहा हमेशा वाला अंत में कोई समस्या हो रही है manual for recursive modules

देखें मेरे अनुभव में,। आपको अपने डिजाइन को सरल बनाने और अधिक स्तरित दृष्टिकोण का उपयोग कर किसी भी निर्भरता चक्र को तोड़ने के लिए समय लेना चाहिए। उदाहरण के लिए, यहां आप परीक्षा में एन को परिभाषित करना चाहते हैं और साथ ही टेस्ट को संदर्भित करना चाहते हैं। लेकिन क्या Test_Outside मॉड्यूल को एन और टेस्ट के अन्य हिस्सों के बारे में जानने की आवश्यकता है, या यह केवल टेस्ट की "आधार" परिभाषाओं का उपयोग करता है, जो "एन से पहले" हैं? आप दो अलग "टेस्ट" मॉड्यूल का उपयोग कर सकते हैं, दूसरे को पहले विस्तारित करने के साथ:

module Test_Outside(Test : Small_Test_Type) = struct ... end 

module InnerTest : Small_Test_Type = struct ... end 

module Test : Test_type = struct 
    include InnerTest 
    module N = Test_Outside(InnerTest) 
    ... 
end