Clap value_of_lossy 函数的 Rust 问题

问题描述 投票:0回答:1

我有一个结构:

pub struct Config {
    files: Vec<String>,
....
}

我使用 Clap 库从命令行获取参数

.arg(
            Arg::with_name("files")
                .value_name("FILE")
                .help("Input file(s)")
                .multiple(true)
                .default_value("-"),
        )

当我尝试为结构体赋值时:

Config {
        files: matches.value_of_lossy("files").unwrap(),
....

我收到以下错误:

error[E0308]: mismatched types
  --> src/lib.rs:42:16
   |
42 |         files: matches.value_of_lossy("files").unwrap(),
   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec<String>`, found `Cow<'_, str>`
   |
   = note: expected struct `Vec<String>`
                found enum `Cow<'_, str>`

For more information about this error, try `rustc --explain E0308`.
error: could not compile `catr` (lib) due to previous error

如何从 Clap 中获取字符串 Vector?我不明白如何改造牛并使用它。

rust clap
1个回答
0
投票

您看到的错误是因为您尝试将 Cow 直接分配给需要 Vec 的字段。要解决此问题,您需要将从 Clap 获得的值转换为 Vec。当您需要多个值时,应使用values_of 或values_of_lossy 方法而不是value_of_lossy 方法。以下是如何修改代码来修复错误,以使用values_of_lossy获取值上的迭代器并将迭代器转换为Vec,如下所示:<'_, str>

Config { files: matches.values_of_lossy("files") .unwrap_or_else(|| vec!["-".to_string()]) .iter() .map(|s| s.to_string()) .collect(), // ... other fields }
    
© www.soinside.com 2019 - 2024. All rights reserved.