【发布时间】:2021-09-29 06:35:59
【问题描述】:
试图了解& 如何在生锈的for..in 循环中工作...
例如,假设我们有一个简单的东西,比如查找最大值函数,它获取i32 的切片并返回最大值。
fn largest(list: &[i32]) -> i32 {
let mut largest = list[0];
for item in list {
if *item > largest {
largest = *item;
}
}
largest
}
在上面给出的场景中,item 将是一个&i32,这对我来说很有意义。我们借用了i32 的切片,因此item 也将是切片中单个项目的引用。在这一点上,我们可以用* 取消引用item 的值,这就是我假设基于指针的语言的工作方式。
但是现在如果我们在下面稍微改变一下......
fn largest(list: &[i32]) -> i32 {
let mut largest = list[0];
for &item in list {
if item > largest {
largest = item;
}
}
largest
}
如果我们将& 放在item 前面,这会将for..in 中的item 更改为i32... 为什么?在我看来,这与我想象它的工作方式完全相反。这对我来说,“给我一个地址/参考item”......这本身就已经是一个参考。那么item 是如何被取消引用的呢?这只是生锈的怪癖还是我从根本上错过了一些东西。
【问题讨论】:
-
这是一种模式。迭代器产生
&i32值,因此您进行模式匹配以获取i32而不是&i32
标签: rust