Rust 为什么不';t每次迭代后更新的变量值?

Rust 为什么不';t每次迭代后更新的变量值?,rust,Rust,我有一个大数组,我正在使用split\u at()对其进行切片: 我在左上执行一些操作,然后在while循环中继续切片右,直到右为空 // test vector let v: Vec<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let (left, right) = v.split_at(1); // left = [1], right = [2,3,4 ... 10] let j: u8 = left[0]; for i in

我有一个大数组,我正在使用
split\u at()
对其进行切片:

我在
上执行一些操作,然后在while循环中继续切片
,直到
为空

// test vector
let v: Vec<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let (left, right) = v.split_at(1); // left = [1], right = [2,3,4 ... 10]
let j: u8 = left[0];
    
for i in 1..10 {
    println!("{} {}", j, right.len()); // prints "1 9" on all iterations
    let (left, right) = right.split_at(1);
    let j: u8 = left[0];
    println!("{} {}", j, right.len()); // prints "2 8" on all iterations
}
//测试向量
让v:Vec=Vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
设(左,右)=v.split_在(1);//左=[1],右=[2,3,4…10]
设j:u8=左[0];
因为我在1..10{
println!(“{}{}”,j,right.len());//在所有迭代中打印“19”
let(左,右)=右。在(1)处拆分_;
设j:u8=左[0];
println!(“{}{}”,j,right.len());//在所有迭代中打印“28”
}


尽管在第一次迭代中,
right
的长度从9变为8,但在第二次迭代中,它返回到9。是什么导致了这种情况?

你没有改变
对吧
,你只是暂时隐藏它,那么为什么结果会改变呢?你的意思是对的。在(i)处拆分?在你的循环中你做的是
正确。在(1)
1
,而不是
i
。@tadman
1
是正确的,因为
right
应该总是越来越小,OP想要取第一个值。就我个人而言,这就是“阴影”的定义。您已经创建了一个与另一个变量同名的新变量,隐藏(“阴影”)第一个变量。您的原始代码是等效的。您没有更改
对吧
,您只是暂时隐藏它,那么结果为什么会更改呢?你的意思是对的。在(i)处拆分?在你的循环中你做的是
正确。在(1)
1
,而不是
i
。@tadman
1
是正确的,因为
right
应该总是越来越小,OP想要取第一个值。就我个人而言,这就是“阴影”的定义。您已经创建了一个与另一个变量同名的新变量,隐藏(“阴影”)第一个变量。您的原始代码是等效的。
// test vector
let v: Vec<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let (left, right) = v.split_at(1); // left = [1], right = [2,3,4 ... 10]
let j: u8 = left[0];
    
for i in 1..10 {
    println!("{} {}", j, right.len()); // prints "1 9" on all iterations
    let (left, right) = right.split_at(1);
    let j: u8 = left[0];
    println!("{} {}", j, right.len()); // prints "2 8" on all iterations
}