rust 带乘法运算符的范围(双点“..”运算符)

yzxexxkh  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(311)

我最近在一些code written by 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(包括42和128)的所有数字,即总共86个数字。

p1tboqfb

p1tboqfb1#

..运算符具有相当低的优先级,这意味着您的乘法在它之前应用。
所以

(1 * i..3 * (i + 1)).collect()

相当于

((1 * i)..(3 * (i + 1)).collect()

i的值为42,它给出了42..129的范围,与您观察到的相符。

相关问题