mirror of https://github.com/sunface/rust-course
parent
966ccfb9be
commit
13901602bf
@ -0,0 +1,6 @@
|
||||
# 多可变引用
|
||||
|
||||
|
||||
https://oribenshir.github.io/afternoon_rusting//blog/mutable-reference
|
||||
|
||||
https://oribenshir.github.io/afternoon_rusting//blog/mutable-reference
|
@ -0,0 +1,40 @@
|
||||
# for循环中使用外部数组
|
||||
|
||||
一般来说,`for`循环能做到的,`while`也可以,反之亦然,但是有一种情况,还真不行,先来看代码:
|
||||
```rust
|
||||
let mut v = vec![1,2,3];
|
||||
|
||||
for i in 0..v.len() {
|
||||
v.push(i);
|
||||
println!("{:?}",v);
|
||||
}
|
||||
```
|
||||
|
||||
我们的目的是创建一个无限增长的数组,往里面插入`0..`(看不懂该表达式的同学请查阅https://course.rs)的数值序列。
|
||||
|
||||
看起来上面代码可以完成,因为随着数组不停增长,`v.len()`也会不停变大,但是事实上真的如此吗?
|
||||
|
||||
```console
|
||||
[1, 2, 3, 0]
|
||||
[1, 2, 3, 0, 1]
|
||||
[1, 2, 3, 0, 1, 2]
|
||||
```
|
||||
|
||||
输出很清晰的表明,只新插入了三个元素:`0..=2`,刚好是`v`的初始长度。
|
||||
|
||||
这是因为:**在for循环中,`v.len`只会在循环伊始之时进行求值,之后就一直使用该值**。
|
||||
|
||||
行,问题算是清楚了,那该如何解决呢,我们可以使用`while`循环,该循环与`for`相反,每次都会重新求值:
|
||||
```rust
|
||||
let mut v = vec![1,2,3];
|
||||
|
||||
let mut i = 0;
|
||||
while i < v.len() {
|
||||
v.push(i);
|
||||
i+=1;
|
||||
println!("{:?}",v);
|
||||
}
|
||||
```
|
||||
|
||||
友情提示,在你运行上述代码时,千万要及时停止,否则会`Boom` - 炸翻控制台。
|
||||
|
Loading…
Reference in new issue