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
。@tadman1
是正确的,因为right
应该总是越来越小,OP想要取第一个值。就我个人而言,这就是“阴影”的定义。您已经创建了一个与另一个变量同名的新变量,隐藏(“阴影”)第一个变量。您的原始代码是等效的。您没有更改对吧
,您只是暂时隐藏它,那么结果为什么会更改呢?你的意思是对的。在(i)处拆分?在你的循环中你做的是正确。在(1)
,1
,而不是i
。@tadman1
是正确的,因为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
}