मैं एक एफ # अनुप्रयोग में कमांड लाइन तर्कों का विश्लेषण करने की कोशिश कर रहा हूं। मैं इसे पूरा करने के लिए पैरामीटर सूची से मिलान पैटर्न का उपयोग कर रहा हूँ। की तरह कुछ:स्ट्रिंग सूचियों पर केस असंवेदनशील पैटर्न मिलान
let rec parseCmdLnArgs =
function
| [] -> { OutputFile = None ; OtherParam = None }
| "/out" :: fileName :: rest -> let parsedRest = parseCmdLnArgs rest
{ OutputFile = Some(fileName) with parsedRest }
समस्या मैं जबकि अन्य सामान के मामले संरक्षण "/out"
मैच केस संवेदी बनाना चाहते है। इसका मतलब है कि मैं इनपुट को बदल नहीं सकता और इसके खिलाफ इनपुट के लोअरकेस संस्करण से मेल नहीं खाता (इससे fileName
केस जानकारी खो जाएगी)।
मैं कई समाधान के बारे में सोचा है:
- रिज़ॉर्ट
when
को खंड जो आदर्श से कम है। - प्रत्येक बार एक टुपल से मेल खाता है, पहला वास्तविक पैरामीटर होगा (जो मैं अभी आगे प्रसंस्करण के लिए सहेजूंगा और वाइल्डकार्ड मैच करेगा) और दूसरा इस तरह के मिलान में उपयोग किया जाने वाला निम्न संस्करण होगा। यह पहले से भी बदतर लग रहा है।
- सक्रिय पैटर्न का उपयोग करें लेकिन यह बहुत वर्बोज़ दिखता है। मुझे प्रत्येक आइटम से पहले
ToLower "/out"
जैसी चीजों को दोहराना होगा।
क्या इस तरह की चीजें करने के लिए कोई बेहतर विकल्प/पैटर्न है? मुझे लगता है कि यह एक आम समस्या है और इसे संभालने का एक अच्छा तरीका होना चाहिए।
मुझे 'InvarianinalEqual' नाम गुमराह करने के लिए नाम मिलता है क्योंकि आप' ऑर्डिनल इग्नोरकेस 'का उपयोग नहीं कर रहे हैं' InvariantCultureIgnoreCase' – Maslow