无法取消引用类型 '()'



有人能解释一下为什么说*profession是单位类型,而它是向量吗?

use hashbrown::HashMap;
fn main() {
let mut sphere: HashMap<String, Vec<&str>> = HashMap::new();
sphere.insert(String::from("junior"), vec![]);
sphere.insert(String::from("Middle"), vec![]);
sphere.insert(String::from("Senior"), vec![]);
loop {
println!();
let mut input = String::new();
std::io::stdin()
.read_line(&mut input)
.expect("What the hell this doesn't work!?");
if input.trim() == "stop" {
break;
}
let splited_data: Vec<&str> = input.split(" to ").collect();
let person = splited_data[0];
let category = splited_data[1].to_string();
let professions = sphere.entry(category.to_string()).or_insert(vec![]);
*professions.push(person);
}
}
error[E0614]: type `()` cannot be dereferenced
--> src/lib.rs:21:9
|
21 |         *professions.push(person);
|         ^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error

*解引用运算符的优先级低于.,因此:

*professions.push(person);

相当于:

*(professions.push(person));

您看到的错误是因为Vec::push返回()

您真正想要的是取消引用向量,然后调用push:

(*professions).push(person);

但是Rust的自动取消引用规则使显式取消引用变得不必要,您可以只写:

professions.push(person);

另请参阅:什么是铁锈';精确的自动取消引用规则?