你能构建一个接受命令行其余部分(或多个参数)的 structopt 解析器吗?
Can you build a structopt parser that takes the rest of the command line (or multiple arguments)?
structopt
有一个巧妙的功能,它可以接受 Vec<T>
的类型化参数,这将吞噬命令行的其余部分。
#[structopt(long, short)]
values: Vec<u32>,
它还有ability to accept a type you create,
If the field type does not have a FromStr
implementation, or you would like to provide a custom parsing scheme other than FromStr
, you may provide a custom string parser using parse(...)
您创建的类型是否可以不是标量并且具有多个值或包装 Vec<T>
是否有方法可以为包装 Vec<T>
的类型创建 custom parser但重新排序它的参数或包含多个字段的结构,例如像这样
struct Positionals {
first: String,
increment: String,
last: String
}
我需要一个不同的结构,因为参数名称取决于顺序,(如果有一个参数,它只是“最后一个”,如果有两个参数,第一个参数不是最后一个,它是“第一个”,第二个参数是“最后一个”)。我想知道是否有一种方法可以编写理解这些细微差别(如上所述)的解析器,或者可以重新排序向量以适应它们。
没有
我认为目前这不可能。我打开了一个RFC for a parser that gets a vec::Drain
, or a parser that get the rest of the command line。我还询问了其他方法来实现这一点。回复是,
The clap
infrastructure (which structopt
only expose on top of struct attribute) doesn't support this as far as I know. Validators in clap (that is named parser in structopt
, as they validate and parse) are implemented on each argument, not on a set of arguments.
structopt
有一个巧妙的功能,它可以接受 Vec<T>
的类型化参数,这将吞噬命令行的其余部分。
#[structopt(long, short)]
values: Vec<u32>,
它还有ability to accept a type you create,
If the field type does not have a
FromStr
implementation, or you would like to provide a custom parsing scheme other thanFromStr
, you may provide a custom string parser usingparse(...)
您创建的类型是否可以不是标量并且具有多个值或包装 Vec<T>
是否有方法可以为包装 Vec<T>
的类型创建 custom parser但重新排序它的参数或包含多个字段的结构,例如像这样
struct Positionals {
first: String,
increment: String,
last: String
}
我需要一个不同的结构,因为参数名称取决于顺序,(如果有一个参数,它只是“最后一个”,如果有两个参数,第一个参数不是最后一个,它是“第一个”,第二个参数是“最后一个”)。我想知道是否有一种方法可以编写理解这些细微差别(如上所述)的解析器,或者可以重新排序向量以适应它们。
没有
我认为目前这不可能。我打开了一个RFC for a parser that gets a vec::Drain
, or a parser that get the rest of the command line。我还询问了其他方法来实现这一点。回复是,
The
clap
infrastructure (whichstructopt
only expose on top of struct attribute) doesn't support this as far as I know. Validators in clap (that is named parser instructopt
, as they validate and parse) are implemented on each argument, not on a set of arguments.