此处的`map`调用是否有实际作用?两段Rust代码是否存在差异?
Rust代码中冗余
map调用的疑问 以下代码出自bellperson项目的lc.rs文件:
pub fn iter(&self) -> impl Iterator<Item = (&usize, &T)> + '_ { self.values.iter().map(|(key, value)| (key, value)) }
提问者认为可以简化为:
pub fn iter(&self) -> impl Iterator<Item = (&usize, &T)> + '_ { self.values.iter() }
问题解答
这两段代码完全没有功能差异,此处的map调用没有任何实际作用,属于纯冗余代码。
原因很明确:self.values.iter()返回的迭代器,产出的元素类型本身就是(&usize, &T),后续的map闭包只是把输入的元组原封不动地返回,没有做任何转换、过滤或额外逻辑处理。
甚至在编译器优化阶段,这个无意义的map调用会被直接消除,所以两段代码在运行效率、功能表现上完全一致,完全可以用简化后的版本替代原代码。
内容的提问来源于stack exchange,提问作者user3698446
相关产品推荐
相关产品推荐

