我最近在 GUILLAUME ENDIGNOUX 编写的一些代码中遇到了这个表达式,它生成一个由 10 个数字组成的向量:
(10 * i..10 * (i + 1)).collect()
给出:420、421、422、423、424、425、426、427、428、429
这是一个工作示例,我将数字“10”替换为“3”以简化:
fn main() {
let v = get_data(42);
assert_eq!(v, [126, 127, 128]);
}
fn get_data(i: usize) -> Vec<usize>{
(3 * i..3 * (i + 1)).collect() // How does this work?
}
这是怎么回事?
将第一个数字更改为例如 1,如下所示:
( 1 * i..3 * (i + 1)).collect()
我预计向量包含 1 个元素,但我得到了从 42 到 128(含)的所有数字。 IE。总共86个号码。
..
运算符的优先级相当低,这意味着您的乘法在它之前应用。
所以
(1 * i..3 * (i + 1)).collect()
相当于
((1 * i)..(3 * (i + 1)).collect()
使用
42
的值 i
给出范围 42..129
,与您观察到的相匹配。