我有一个结构:
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?我不明白如何改造牛并使用它。
您看到的错误是因为您尝试将 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
}