Rust代码中&item的用法疑问:为何无需解引用即可直接比较?
Rust切片代码疑问解答
这段代码里的核心是模式匹配的解构特性:
bytes.iter()返回的迭代器,每次产出的是字符串字节的引用(类型为&u8);.enumerate()将其包装后,迭代器的每个元素变成(索引值, 元素引用),也就是(usize, &u8);- 在
for (i, &item) in ...的模式中,&item是对&u8类型的元素做解构——它把引用指向的实际u8值绑定给了item,此时item的类型就是u8,和字节字面量b' '(类型同样是u8)属于同一类型,因此可以直接用item == b' '做比较。
如果把模式写成(i, item),那item的类型就是&u8(引用类型),这时候才需要通过*item == b' '手动解引用,获取底层的u8值再比较。
总结来说:模式里的&帮你直接“拆”掉了引用,拿到了底层的实际值,所以不需要再手动解引用。
内容的提问来源于stack exchange,提问作者Antonio Gamiz Delgado
相关产品推荐
相关产品推荐

