में एकाधिक मॉड्यूल में परिभाषित एक फ़ंक्शन को गतिशील रूप से कॉल करने के लिए कैसे मैंने कई फ़ंक्शन (कहें, 100+) परिभाषित किए हैं, जिनमें से प्रत्येक एक विशिष्ट कार्य करता है लेकिन उसी हस्ताक्षर के साथ।एक ही हस्ताक्षर
module R001 (run) where run = <do-...>
module R002 (run) where run = <do-...>
मुझे क्या करना चाहते हैं, उपयोगकर्ता इनपुट के रूप में वास्तविक 'रन' प्रदान करते हैं ऐसी है कि करने के लिए है: कुछ की तरह यही कारण है
main = do
runWith $ read $ getLine
where
runWith :: Int -> IO()
runWith n = R<n-padded-with-0>.run
वर्तमान में, मैं सभी मॉड्यूल योग्य आयात करते हैं और डाल सब run
[Maybe (IO())]
की एक सूची में है, तो यह काम करता है:
runWith n = case Rs !! (read $ getLine) of
Just run -> run
Nothing -> undefined
लेकिन जैसे n
बढ़ता है, मैं लगातार एक बड़ी सूची बनाए रखने के लिए किया है।
क्या कोई तरीका है कि मैं टेम्पलेटहस्केल का उपयोग करके बड़ी सूची को परिभाषित कर सकता हूं, या अलग-अलग साझा पुस्तकालयों में प्रत्येक मॉड्यूल को अलग किए बिना रनटाइम पर आवश्यक मॉड्यूल को लोड कर सकता हूं।
import R1 (run1)
import R2 (run2)
test = $(functionExtractor "^run")
main :: IO()
main = do
putStrLn $ show $ length $ test
run1 -- remove on second attempt
run2 -- remove on second attempt
run1
और run2
के परिणाम निम्न कोड प्रिंट 2 के इस ब्लॉक:
epsilonhalbe के जवाब के आधार पर, मैं कुछ शोध किया। अगर मैं पिछले दो लाइनों को हटा देता हूं, तो यह सिर्फ 0 प्रिंट करता है। ऐसा लगता है कि आयात किए गए कार्यों को संदर्भित नहीं किया जाएगा ...
धन्यवाद! यह बहुत उपयोगी है, कम से कम 'functionExtractor' मेरे लिए नया है। मैंने कुछ शोध किया, और मूल पोस्ट को अपडेट किया। – claude
यह क्विक चेक के 'prop_ *' जैसा है। हास्केल टेस्ट फ्रेमवर्क 'एचटीएफ' जो एक फ़ाइल में सभी हनीट टेस्टकेसेस/क्विक चेक प्रोप एकत्र करता है, एक कस्टम प्रीप्रोसेसर '{- # OPTIONS_GHC -F -pgmF htfpp # -}' का उपयोग करता है। यह आखिरी समाधान है जिसका मैं उपयोग करना चाहता हूं, लेकिन मुझे डर है कि यह एकमात्र समाधान है? – claude
मुझे सबसे निश्चित रूप से यकीन है कि यह एकमात्र समाधान नहीं है - लेकिन सबसे अच्छा मैं साथ आ सकता हूं। – epsilonhalbe