1

structopt有一个简洁的功能,它可以接受一个类型化的参数,因为Vec<T>它会吞噬命令行的其余部分。

#[structopt(long, short)]
values: Vec<u32>,

它还能够接受您创建的类型

如果字段类型没有FromStr实现,或者您想提供除 之外的自定义解析方案FromStr,您可以使用以下方式提供自定义字符串解析器parse(...)

您创建的类型是否可以不是标量并且具有多个值或包装 a是否有一种方法可以为包装但重新排序其参数的类型或包含多个字段的结构Vec<T>创建自定义解析器,例如像这样Vec<T>

struct Positionals {
  first: String,
  increment: String,
  last: String
}

我需要一个不同的结构,因为参数名称取决于顺序,(如果有一个参数,它只是“最后一个”,如果有两个参数,第一个参数不是最后一个,它是“第一个”,第二个参数是“最后一个” )。我想知道是否有办法编写一个解析器来理解这些细微差别(如上所述),或者可以重新排序一个向量以适应它们。

4

1 回答 1

0

我不相信这是目前可能的。我为获取 . 的解析器或获取命令行其余部分的解析器打开了RFCvec::Drain。我还要求提供替代方法来实现这一目标。回应是,

据我所知,clap基础设施(structopt仅在 struct 属性之上公开)不支持这一点。clap 中的验证器(称为 parser in structopt,因为它们验证和解析)在每个参数上实现,而不是在一组参数上实现。

于 2021-10-04T16:30:55.800 回答