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

Rust中(&v).func()与&v.func()的区别及(&v)作用解析

Rust中(&v).func()与&v.func()的区别解析

先明确核心差异:Rust里函数调用的优先级高于取引用操作,所以两者的执行顺序完全不同:

  • (&v).func():先对v取引用得到&v,再调用这个引用的func()方法
  • &v.func():先调用v的func()方法,再对方法的返回值取引用

结合你给出的两段代码具体分析:

第一段代码:(&v).into_iter()

let v = vec!["hello", "viktor"];
let mut iterator = (&v).into_iter(); // Iter<&str>

这里(&v)的作用是把Vec<&str>类型的v转换成&Vec<&str>(不可变引用),然后调用这个引用的into_iter()方法。

Rust为&Vec<T>实现了IntoIterator trait,对应的into_iter()会返回Iter<T>类型的迭代器——这个迭代器不会消耗原Vec,只是遍历原Vec中元素的不可变引用。这里T是&str,迭代器产生的元素实际是&&str(注释里的Iter<&str>是简化写法),原v可以继续被使用。

第二段代码:&v.into_iter()

let mut iterator = &v.into_iter(); // &IntoIter<&str>

这里先执行v.into_iter():Rust为Vec<T>本身实现的IntoIterator trait会返回IntoIter<T>类型的迭代器——这个迭代器会消耗原Vec,把v的所有权转移到迭代器中,原v之后就不能再被使用了。

然后再对这个IntoIter<&str>类型的迭代器取引用,得到&IntoIter<&str>,这是一个指向消耗型迭代器的引用,和第一段的迭代器类型、行为完全不同。

总结(&v)的核心作用

(&v)本质是改变方法调用的接收者类型,让后续调用的into_iter()匹配到为引用类型实现的trait版本,而非为原类型实现的版本,最终得到不同行为、不同类型的返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:40:34