如何修复Clippy的Clippy警告::or_fun_call for or_insert/or_insert_wit



我需要计算Vec中自定义结构的重复项。我在带有自定义函数的结构的Vec中发现了count部分重复。

我的代码是:

pub fn check_index_duplicates(
dataset: &[main_index::MotiveImageDefinition],
) -> Result<(), Box<dyn std::error::Error>> {
let mut keyed = HashMap::new();
for c in dataset {
keyed.entry(c.key()).or_insert(vec![]).push(c)
}
for (k, v) in &keyed {
if v.len() > 1 {
print_an_error(&(format!("Motive {:?} has {} duplicates on index.csv", k, v.len())));
}
}
Ok(())
}
impl main_index::MotiveImageDefinition {
fn key<'a>(&'a self) -> (&'a str, &'a str) {
(&self.motive, &self.theme)
}
}
#[derive(Debug)]
pub struct MotiveImageDefinition {
pub id: u64,
pub motive: String,
pub theme: String,
pub path: String,
pub stereo_image: String,
pub width_pix: String,
pub height_pix: String,
}

这正是我所需要的。当我使用clippy:

cargo clippy --all-targets --all-features -- -D warnings

它给了我接下来两个我无法修复的提示:

error: use of `or_insert` followed by a function call
--> src/image/mod.rs:215:30
|
215 |         keyed.entry(c.key()).or_insert(vec![]).push(c)
|                              ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(vec![])`

我试图将or_insert更改为or_insert_with,但它无法编译。

它实际上对我有效的是@user4815162342答案:

pub fn check_index_duplicates(
dataset: &[main_index::MotiveImageDefinition],
) -> Result<(), Box<dyn std::error::Error>> {
let mut keyed = HashMap::new();
for c in dataset {
keyed.entry(c.key()).or_insert_with(Vec::new).push(c)
}
for (k, v) in &keyed {
if v.len() > 1 {
print_an_error(&(format!("Motive {:?} has {} duplicates on index.csv", k, v.len())));
}
}
Ok(())
}

最新更新