2012-04-22 10 views
10

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

दूसरे शब्दों में, मैं चाहता हूँ की तरह कुछ:

let module M = 
    if model = "tree" then TreeModel else 
    if model = "hash" then HashModel else 
    ListModel 
in ... 

वहाँ एक रास्ता है कि मैं इस काम कर सकते हैं, या मैं सब गलत इस बारे में जा रहा हूँ?

उत्तर

11

मॉड्यूल स्तर पर कोई सशर्त रहे हैं, लेकिन आप इस के लिए प्रथम श्रेणी के मॉड्यूल का उपयोग कर सकते हैं:

let m = match model with 
    | "tree" -> (module TreeModel : MODEL) 
    | "hash" -> (module HashModel : MODEL) 
    | "list" -> (module ListModel : MODEL) 
in let module M = (val m : MODEL) 
in ... 
+0

धन्यवाद, यह वही था जो मैं ढूंढ रहा था! –

0

@Andreas लिए एक अनुवर्ती, कम से कम हाल ही में ocaml संस्करणों आप भी लिख सकते हैं के रूप में :

let (module M : MODEL) = match model with 
    | "tree" -> (module TreeModel : MODEL) 
    | "hash" -> (module HashModel : MODEL) 
    | "list" -> (module ListModel : MODEL) 
in ... 
+0

और इस फ़ॉर्म के साथ, आपको सभी मिलान शाखाओं में मॉड्यूल प्रकार की जानकारी लिखनी नहीं है: '(मॉड्यूल एम: मॉडल)' पर्याप्त है और प्रचारित होगा। – lavi

संबंधित मुद्दे