2012-09-18 16 views
7

Sto utilizzando la libreria optparse-applicative in un'applicazione che accetta più stringhe sulla riga di comando ed esegue un'azione su ciascuna di esse. Il mio primo tentativo è stato questo:optparse-application: richiede almeno un argomento

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

Purtroppo, questo permette di eseguire il programma con senza argomenti, anche se non ha molto senso.

Il mio secondo tentativo ha coinvolto l'analisi del primo argomento a parte, poi consing al resto della lista:

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

Questo dovrebbe avere lavorato, ma non fu così: quando viene chiamato con --help, i Gobbles parser su e lo elabora invece di visualizzare il testo della guida.

Quindi la mia domanda è: come configurare optparse per richiedere almeno un argomento?

risposta

6

Okay – Ho reported this issue all'autore della biblioteca (Paolo Capriotti). Egli rispose:

Il problema qui è che arguments ha una certa logica speciale:

  • inizialmente ignorano gli argomenti che iniziano con '-'
  • accettare '-'
  • accettano argomenti a cominciare '-' dopo '-' si incontra

Dato questo comportamento desiderato, arguments non può semplicemente essere implementato come many argument.

Cosa possiamo fare per rendere i casi di uso comune come quello in questo numero facile da affrontare, è quello di aggiungere un po 'di costruttori di convenienza, come:

  • arguments1, lista di argomenti non vuota, con lo stesso comportamento come argomenti
  • argument', analizzare 1 argomento, ignorando cose iniziano con '-'

questo modo, molti argomento' sarebbe simile agli argomenti (senza la gestione speciale di -), e alcuni argomento 'per arguire nts1.

Suggerimenti per nomi migliori sono i benvenuti. :)

In altre parole, ha aggiunto una nuova funzione arguments1 per fare ciò che ho descritto. Quella funzione è disponibile dalla versione 0.5.

Così ora il mio codice è simile al seguente:

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

Grazie, Paolo!

+1

fyi ... dalla versione 0.9.0 'arguments' e' arguments1' sono deprecati a favore dell'uso dei 'molti' e' alcuni' combinatori con 'argomento'. – ErikR

+0

Grazie per il commento aggiuntivo. – drumfire

+0

@ErikR Ma 'some' con argomenti non stampa messaggi di aiuto utili per impostazione predefinita (ad esempio no' ... 'alla fine) :-( –

Problemi correlati