2013-05-07 12 views
7

Documentazione indicare chiaramente l'uso 'def', che fornisce un valore di default (vuoto) per la bandieraÈ possibile definire un flag richiesto utilizzando System.Console.CmdArgs.Implicit?

sample = Sample{hello = def &= help "World argument" &= opt "world"} 
     &= summary "Sample v1" 

ma non sono riuscito a trovare un modo di dire che voglio forzare la bandiera ad essere richiesto.

Devo davvero andare su Explicit o c'è un modo per definire un flag richiesto in Implicit?

+1

Non proprio sull'argomento, ma vorrei anche dare un'occhiata a [optparse-applicative] (http://hackage.haskell.org/package/optparse-applicative-0.5.2.1) - L'ho trovato un po 'più bello da usare . – isturdy

risposta

8

La documentazione per opt afferma che

Si noti che tutte le bandiere in CmdArgs sono opzionali, e se omesso utilizzerà il valore predefinito.

Quindi sembra che non sia possibile definire un flag come obbligatorio utilizzando lo stile implicito.

È tuttavia possibile rilevare l'omissione di un flag utilizzando un valore Maybe. Per esempio.

data Sample = Sample { hello :: Maybe String } 
sample = Sample{hello = def &= help "World argument" &= opt "world"} 
    &= summary "Sample v1" 

Ora, se si omette la bandiera, si ottiene un Nothing e se l'utente fornisce un valore, si ottiene Just "value". Ciò significa che puoi verificare tu stesso il Nothing e terminare con un messaggio di errore appropriato.

+1

È deliberato: le app della console normalmente non richiedono i flag denominati, sebbene sia possibile richiedere argomenti posizionali. –

+0

Ha perfettamente senso. Non l'ho capito subito ma ora che lo dici, è ovvio. –

Problemi correlati