gpt4 book ai didi

rust - 使用根据另一个标志更改的 structopt 定义自定义解析器

转载 作者:行者123 更新时间:2023-11-29 08:09:09 26 4
gpt4 key购买 nike

我使用 structopt 来解析我的 Rust 应用程序的命令行参数。有问题的标志如下:query(位置)和 case_sensitive(可选)。

#[derive(StructOpt, Debug)]
pub struct Config {
/// Query to search for.
#[structopt(parse(try_from_str = "parse_regex"))]
query: Regex,

/// Specify whether or not the query is case sensitive.
#[structopt(long)]
case_sensitive: bool,
}

我最终想做的是编写 parse_regex,它根据查询字符串参数构建一个正则表达式。

fn parse_regex(src: &str) -> Result<Regex, Error> {
let case_sensitive = true; // !!! problem here: how to grab the value of the `case_sensitive` flag?
RegexBuilder::new(src).case_insensitive(!case_sensitive).build()
}

我想知道的是,自定义解析函数是否可以获取另一个标志(在本例中为 case_sensitive)的值,以便动态解析自己的标志。

最佳答案

在命令行上,标志通常可以按任何顺序传递。这使得很难在解析器中引入这种依赖。

因此,我的建议是引入两步处理:

  1. 收集标志,并进行一些预处理。
  2. 处理互动。

在你的情况下:

#[derive(StructOpt, Debug)]
pub struct Config {
/// Query to search for.
#[structopt(string)]
query: String,

/// Specify whether or not the query is case sensitive.
#[structopt(long)]
case_sensitive: bool,
}

然后:

fn build_regex(config: &Config) -> Result<Regex, Error> {
RegexBuilder::new(&config.query)
.case_insensitive(!config.case_sensitive)
.build()
}

关于rust - 使用根据另一个标志更改的 structopt 定义自定义解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com