【发布时间】:2021-03-19 07:32:30
【问题描述】:
我正在阅读 Rust 书籍,特别是第 8.3 节中的“部门”练习。
我对从我创建的方法返回的内容感到有些困惑。
#[derive(Debug, PartialEq, Eq, Hash)]
enum Department {
Sales,
Engineering,
}
#[derive(Debug)]
struct Company {
users: HashMap<Department, Vec<String>>,
}
impl Company {
fn add_user_to_department(&mut self, department: Department, employee: String) {
let users = self.users.entry(department).or_insert(Vec::new());
users.push(employee);
}
fn get_users_in_department(&self, department: Department) -> &[String] {
match self.users.get(&department) {
Some(u) => &u,
None => &[]
}
}
}
起初我以为get_users_in_department 方法返回的是Vec 的一部分(或者在None 的情况下是静态文字)。
但在我的match 语句中,我没有使用切片语法,而是返回了对Vec 的借用引用。
match self.users.get(&department) {
Some(u) => &u,
None => &[]
}
如果我要返回一个切片,我是否必须返回 Some(u) => &u[..],
我想我的困惑归结为get_users_in_department 的返回类型是什么。它是返回对String 数组的引用,还是String 数组的切片。由于某种强制,这两种类型是否可以互换?如果可以区分两者,我将如何以及何时返回其中一个?
【问题讨论】:
标签: arrays vector types rust slice