使用Rayon crate并行化迭代遇par_iter方法未找到错误求助
解决Rayon
par_iter 方法找不到的编译错误 嗨,这个问题我熟!你遇到的no method named par_iter found错误,本质是因为Rayon的并行迭代方法是通过trait扩展给标准容器(比如Vec)添加的,而你还没导入对应的trait,导致编译器识别不到这些方法。
你需要做这两步来修复:
确认依赖已添加
先检查你的Cargo.toml文件,确保已经把Rayon加入依赖项,比如:[dependencies] rayon = "1.8" # 可以替换成最新版本号导入Rayon的prelude模块
在你的src/lib.rs文件顶部,添加这行导入:use rayon::prelude::*;Rayon把所有用于扩展标准类型的并行迭代trait都放在
prelude里,导入它之后,Vec就会自动拥有par_iter、par_iter_mut这些并行迭代方法了。
另外补充个小提醒:如果你的calculate_normals方法需要修改Triangle实例,那你得用par_iter_mut()而不是par_iter(),前者会提供可变的并行迭代器。
举个修改后的代码片段参考:
use rayon::prelude::*; // ... 你的其他代码逻辑 ... fn update_normals(&mut self) { // 如果calculate_normals是只读方法,用par_iter() self.triangles.par_iter().for_each(|triangle| triangle.calculate_normals()); // 如果需要修改triangle,换成par_iter_mut() // self.triangles.par_iter_mut().for_each(|triangle| triangle.calculate_normals()); }
这样应该就能解决你当前的编译错误啦!
内容的提问来源于stack exchange,提问作者vishpat
相关产品推荐
相关产品推荐

