2012-09-18 10 views
7

मैं optparse-applicative लाइब्रेरी का उपयोग ऐसे एप्लिकेशन में कर रहा हूं जो कमांड लाइन पर एकाधिक स्ट्रिंग लेता है और प्रत्येक पर एक क्रिया करता है।ऑप्टपर-आवेदक: कम से कम एक तर्क की आवश्यकता है

arguments Just 
    (metavar "EXPR" 
    & help "Expressions to render, in zero-based De Bruijn index notation") 

दुर्भाग्य से, इस कोई तर्क के साथ कार्यक्रम चल रहा है, भले ही यह बहुत मतलब नहीं है की अनुमति देता है: मेरी पहली कोशिश यह थी।

मेरे दूसरे प्रयास पहला तर्क अलग पार्स करने शामिल है, तो सूची के शेष के लिए यह consing:

(:) <$> argument Just (metavar "EXPR") 
    <*> arguments Just (metavar "EXPR") 

यह काम किया जाना चाहिए था, लेकिन उसने ऐसा नहीं किया: जब --help साथ कहा जाता है, पार्सर gobbles इसे सहायता टेक्स्ट प्रदर्शित करने के बजाय इसे ऊपर और संसाधित करता है।

तो मेरा सवाल है: मैं कम से कम एक तर्क की आवश्यकता के लिए ऑप्टपरसे को कैसे कॉन्फ़िगर कर सकता हूं?

उत्तर

6

ठीक – लाइब्रेरी (पाओलो कैप्रियोटी) के लेखक के पास reported this issue है। उन्होंने कहा:

समस्या यहाँ arguments करने के लिए कुछ विशेष तर्क है कि:

  • शुरू में उपेक्षा तर्क के साथ शुरू '-'
  • स्वीकार '-'
  • स्वीकार तर्क के साथ शुरू '-' के बाद '0' का सामना किया गया है

इस वांछित व्यवहार को देखते हुए, arguments बस नहीं many argument के रूप में लागू किया जाना चाहिए। साथ

  • arguments1, गैर खाली तर्क सूची,:

    क्या हम सामान्य उपयोग के मामलों इस अंक में से एक की तरह आसान, से निपटने के लिए बनाने के लिए क्या कर सकते हैं, सुविधा बिल्डरों के एक समूह को जोड़ने के लिए की तरह है के रूप में तर्क

  • argument', समान व्यवहार 1 तर्क पार्स के साथ शुरू बातें अनदेखी, और कुछ '- -'

इस तरह, कई तर्क के तर्क करने के समान होगा (की विशेष हैंडलिंग के बिना) बहस करने के लिए तर्क ' nts1।

बेहतर नामों के लिए सुझावों का स्वागत है। :)

दूसरे शब्दों में, उन्होंने जो वर्णन किया है, उसके लिए उन्होंने एक नया फ़ंक्शन arguments1 जोड़ा। वह कार्य संस्करण 0.5 के बाद से उपलब्ध है।

तो अब मेरी कोड इस तरह दिखता है:

arguments1 Just 
    (metavar "EXPR" 
    <> help "Expressions to render, in zero-based De Bruijn index notation") 

धन्यवाद, पाओलो!

+1

fyi ... संस्करण 0.9.0 'तर्क' और 'तर्क 1' के रूप में 'तर्क' के साथ 'कई' और 'कुछ' संयोजकों का उपयोग करने के पक्ष में बहिष्कृत किया गया है। – ErikR

+0

अतिरिक्त टिप्पणी के लिए धन्यवाद। – drumfire

+0

@ErikR लेकिन तर्क के साथ 'कुछ' डिफ़ॉल्ट रूप से उपयोगी सहायता संदेशों को मुद्रित नहीं करता है (यानी अंत में कोई नहीं ...)-( –

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