2012-09-18 138 views
7

我在一個應用程序中使用optparse-applicative庫,該應用程序在命令行上接受多個字符串並對每個字符串執行一個操作。我的第一次嘗試是這樣的: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叫,解析器鯨吞它並且處理它而不是顯示幫助文本。

所以我的問題是:如何配置optparse至少需要一個參數?

回答

6

好吧–我有reported this issue給圖書館的作者(Paolo Capriotti)。他回答說:

的這裏的問題是,arguments有一些特殊的邏輯:

  • 最初忽略的參數以 ' - '
  • 接受 ' - '
  • 接受參數開始' - '遇到' - '後

鑑於這種所需的行爲,arguments不能簡單地實施爲many argument

我們可以做,使常見的情況就像一個在這個問題更容易處理,就是加了一堆方便建設者,如:

  • arguments1,非空的參數列表,相同的行爲作爲參數
  • argument',解析1種說法,忽略的事情開始「 - 」

這樣一來,很多說法」將類似於參數(沒有的特殊處理 - ),以及一些爭論'到argume NTS1。

歡迎提供更好名稱的建議。 :)

換句話說,他增加了一個新功能arguments1做我所描述的。該功能自0.5版本開始提供。

所以現在我的代碼看起來是這樣的:

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

謝謝,保羅!

+1

fyi ...從版本0.9.0開始'arguments'和'arguments1'被棄用,贊成使用'many'和'some'組合參數''參數'。 – ErikR

+0

感謝您的額外評論。 – drumfire

+0

@ErikR但是帶參數的'some'在默認情況下不打印有用的幫助信息(即末尾沒有'...'):-( –

相關問題