【发布时间】:2015-04-19 19:36:44
【问题描述】:
我正在开发一个简单的 Rust 应用程序,它接受标准输入并在此基础上运行。我想让每个命令都返回一个结果向量。
不同的命令可能返回不同类型的向量; list 方法返回一个PathBufs 的向量,但默认匹配臂返回字符串:
use std::{io, fs};
use std::path::PathBuf;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let chars_to_trim: &[char] = &['\n'];
let trimmed_input: &str = input.trim_matches(chars_to_trim);
let no_match = vec!["No Match"];
let result = match trimmed_input {
"list" => list(),
_ => no_match,
};
}
fn list() -> Vec<PathBuf> {
println!("{}", "list of lockfiles here");
let entries = fs::read_dir("/tmp").expect("Failed to read /tmp");
let all: Result<_, _> = entries.map(|entry| entry.map(|e| e.path())).collect();
all.expect("Unable to read an entry")
}
这会导致编译失败:
error[E0308]: match arms have incompatible types
--> src/main.rs:12:22
|
12 | let result = match trimmed_input {
| ^ expected struct `std::path::PathBuf`, found &str
|
= note: expected type `std::vec::Vec<std::path::PathBuf>`
= note: found type `std::vec::Vec<&str>`
note: match arm with an incompatible type
--> src/main.rs:14:18
|
14 | _ => no_match,
| ^^^^^^^^
处理这个问题的惯用 Rust 方法是什么?我已经阅读了有关泛型的文档,但我不确定如何应用它。
【问题讨论】:
标签: rust