8

我在一个应用程序中使用optparse-applicative库,它在命令行上采用多个字符串并对每个字符串执行一个操作。我的第一次尝试是这样的:

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

不幸的是,这允许在没有参数的情况下运行程序,即使它没有多大意义。

我的第二次尝试涉及分别解析第一个参数,然后将其转换为列表的其余部分:

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

这应该有效,但它没有:当使用 调用时--help,解析器会吞噬并处理它,而不是显示帮助文本。

所以我的问题是:如何配置 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 回答