Rust中如何通过迭代器修改结构体内部Vec的元素值?
问题原因
你原来的non_working_solution有两个核心错误:
Vec::iter()返回的是只读引用迭代器,拿到的元素类型是&u8,本身就不支持修改指向的元素值- 代码里的
x = &number只是修改了闭包内本地变量x的指向,让它从指向Vec的元素改成指向参数number的内存地址,完全没有修改Vec内部的存储内容,当然不会生效
正确实现
要迭代修改Vec的元素,需要使用iter_mut()方法获取可变引用迭代器,拿到&mut u8类型的可变引用后,通过解引用操作符*就可以直接修改原Vec中的元素:
fn non_working_solution(&mut self, number: u8) -> bool { self.vec.iter_mut().all(|x| { *x = number; // 解引用可变引用,直接修改Vec内的对应元素 true // 此处替换为你的外部校验逻辑,返回false会立刻终止迭代并整体返回false }) }
修改后运行即可得到你预期的输出,且all()方法的短路特性正好匹配你的需求:只要任意一次修改后的校验不通过,就会立刻停止迭代,直接返回false,不会继续修改后续元素。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

