You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Rust未支持根据迭代元素类型自动选择迭代方式的for循环?

Rust for循环迭代逻辑的设计疑问

在Rust中,我们知道编写如下for循环代码时:

let v = vec![1,2,3];

for i in v {
   println!("{i}");
}

编译器会自动调用v.into_iter()——这是因为for循环要求被迭代的集合必须实现IntoIterator trait,该 trait 定义了fn into_iter(self) -> Self::IntoIter方法,这种迭代方式会获取集合元素的所有权。

但这里有个疑问:为什么for循环的语法糖只支持这种获取所有权的迭代场景,却没有提供简化借用迭代的语法?比如借助iter()(不可变引用迭代)或iter_mut()(可变引用迭代)的场景,现在必须写:

let v = vec![1,2,3];
    
for &i in v.iter() {
   println!("{i}");
}

而非更简洁的写法:

let v = vec![1,2,3];
    
for &i in v { // 注:这段代码无法编译,因为默认调用into_iter()返回的是i32而非&i32
   println!("{i}");
}

我想搞清楚:让编译器根据程序员需要的迭代元素类型(所有权、不可变引用、可变引用)自动选择调用into_iter()、iter()或iter_mut(),为什么是不可行的设计?如果没有合理的原因,我打算提交RFC。


内容的提问来源于stack exchange,提问作者joosts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:22:11