范围运算符(双点“..”)相乘时有何作用?

问题描述 投票:0回答:1

我最近在 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个号码。

rust range operator-precedence
1个回答
6
投票

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

所以

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

相当于

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

使用

42
的值
i
给出范围
42..129
,与您观察到的相匹配。

© www.soinside.com 2019 - 2024. All rights reserved.