rust - 如何检查命令行参数的第二个元素?

标签 rust

我需要检查第二个元素以确定我对其余参数执行的操作。

这将循环遍历命令行参数并跳过第一个参数,因为它始终是程序名称。它还会跳过第二个,因为这是我在列表上执行的操作:

for arg in std::env::args().skip(2)

我正在做以下是多余的:

let check: Vec<String> = env::args().collect();

if check[1] == 'sort'{
    for arg in std::env::args().skip(2){
       //sort
    }
}

有更好的方法吗?

最佳答案

您可以使用 nth() :

let second_arg = env::args().nth(1).expect("no second arg");

返回 Option<String> .

它在语义上等同于调用 skip(1)其次是 next() .

更进一步,您可以使用模式匹配:

let mut args = env::args();
match args.nth(1).as_ref().map(|s| s.as_str()) {
    // args has been consumed so it will iterate over the next elements
    Some("sort") => for arg in args {
        println!("arg: {}", arg);
    },
    _ => {},
}

需要从String转换参数至 &str为了能够使用 Some("sort")原样。

或者,您可能希望使用命令行解析包,例如 clap .

关于rust - 如何检查命令行参数的第二个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119143/

相关文章:

rust - 如何设计具有测试友好性的 Axum 服务器?

rust - Actix-Web引发-未配置App数据,要使用App::data()进行配置

rust-lld 丢失了,我该如何安装它?

postgresql - 当字段类型在编译时未知时,如何使用tokio-postgres枚举列?

build - 如何让 Cargo 执行构建脚本并同时使用目标特定的链接器?

rust - 从 HashMap 或 Vec 返回引用会导致借用超出其所在范围?

rust - 如何在 Substrate 中实现后台线程?

rust - 我必须怎么做才能解决 "use of moved value"错误?

Rust libp2p 在 crate libp2p 中找不到函数development_transport

rust - Rust将枚举返回为通用类型