Rust的for..in循环中&符号的作用是什么?
Rust for循环中
&符号的模式匹配逻辑 这是Rust的模式匹配语法设计,不是你对基础概念的理解有偏差。核心区分点是:&符号在表达式位置是取引用,在模式匹配位置是解构引用,而for关键字后面的变量声明位置,本身就是模式匹配的上下文。
原理拆解
首先你已知遍历&[i32]类型的切片时,迭代器每次产出的元素类型是&i32,两种写法的差异本质是对这个&i32值的处理方式不同:
- 第一种写法
for item in list
直接把迭代器产出的&i32值绑定到item变量上,所以需要手动加*解引用才能拿到i32类型的原值:
fn largest(list: &[i32]) -> i32 { let mut largest = list[0]; for item in list { if *item > largest { largest = *item; } } largest }
- 第二种写法
for &item in list
这里的&属于模式匹配的解构语法,含义是「匹配右边的&i32类型值,把引用指向的内部i32值绑定到item变量」,相当于自动完成了一次解引用匹配,所以item直接就是i32类型,不需要手动解引用:
fn largest(list: &[i32]) -> i32 { let mut largest = list[0]; for &item in list { if item > largest { largest = item; } } largest }
通用模式匹配示例
这种解构逻辑是Rust模式匹配的通用规则,不局限于for循环,你可以用普通的let语句复现同样的效果:
let num: i32 = 10; let num_ref: &i32 = # // 表达式位置的&,取引用,num_ref类型是&i32 let &x = num_ref; // 模式位置的&,解构引用,x类型是i32,值为10
和枚举值的解构逻辑完全一致:
let opt = Some(5); let Some(v) = opt else { panic!() }; // 解构Option,v的类型是i32,值为5
内容的提问来源于stack exchange,提问作者James Chung
相关产品推荐
相关产品推荐

