Библиотека обработки аргументов командной строки на Haskell - PullRequest
8 голосов
/ 15 апреля 2011

Я уже некоторое время использую cmdargs для обработки аргументов, и это здорово. Однако я не вижу возможности для длинных имен опций с одним дефисом, например -option1 -option2 или более сложный -optx, что эквивалентно --opt=x. Мне нужно поддерживать совместимость с существующим приложением, поэтому оба эти формата необходимы.

System.Console.Getopt тоже не подходит. Кто-нибудь может предоставить пример того, как это сделать с помощью cmdargs, или предложить альтернативную библиотеку, которая будет поддерживать это?

1 Ответ

9 голосов
/ 10 июня 2011

Вероятно, самое простое, что вы можете сделать, - это выполнить быструю предварительную обработку самостоятельно.Например, если вам нужно поддерживать ровно три параметра -option1, -option2 и -optx, что-то вроде этого должно работать:

munge "-option1" = "--option1"
munge "-option2" = "--option2"
munge s | "-opt" `isPrefixOf` s = "--opt=" ++ drop 4 s
munge s = s

main = do
    realArgs <- getArgs
    withArgs (map munge realArgs) mainThatUsesCmdArgs

Как вы говорите, однако, справочные сообщения будуттогда больше не упоминают о возможности иметь эти короткие формы.(Возможно, это хорошая вещь.)

Если вы хотите большего, вам, вероятно, придется убедить кого-то изменить cmdargs.

...