8

コマンドラインで複数の文字列を受け取り、それぞれに対してアクションを実行するアプリケーションでoptparse-applicativeライブラリを使用しています。私の最初の試みはこれでした:

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

残念ながら、これにより、あまり意味がありませんが、引数なしでプログラムを実行できます。

私の 2 番目の試みでは、最初の引数を個別に解析し、それをリストの残りの部分に変換しました。

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

これは機能するはずでしたが、機能しませんでした: で呼び出されると--help、パーサーはヘルプ テキストを表示する代わりにそれを飲み込んで処理します。

だから私の質問は: 少なくとも 1 つの引数を必要とするように optparse を構成するにはどうすればよいですか?

4

1 に答える 1

7

わかりました–この問題をライブラリの作成者(Paolo Capriotti)に報告しました。彼は返事をした:

ここでの問題は、arguments次のような特別なロジックがあることです。

  • 最初は「-」で始まる引数を無視します
  • 受け入れる ' - '
  • '-'の後に'-'で始まる引数を受け入れる

この望ましい動作を考えると、arguments単純にとして実装することはできませんmany argument

この号のような一般的なユースケースを扱いやすくするためにできることは、次のような便利なビルダーを追加することです。

  • arguments1、空でない引数リスト、引数と同じ動作
  • argument'、「-」で始まるものを無視して、1つの引数を解析します

このように、多くの引数は(-の特別な処理なしで)引数に似ており、いくつかの引数はarguments1に似ています。

より良い名前の提案は大歓迎です。:)

言い換えれば、彼はarguments1私が説明したことを実行するための新しい関数を追加しました。この機能はバージョン0.5から利用できます。

これで、私のコードは次のようになります。

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

ありがとう、パオロ!

于 2013-02-01T03:03:43.673 に答える