在 Rust 中的 if 块内创建一个向量。 if作用域结束后如何使用?

A vector is created inside an if block in Rust. How to use it after the scope of if ends?

我正在学习 Rust。我正在尝试计算一个不超过某个数字的素数列表。为此,我需要在 if 块内创建一个向量 (vec1) 并在 if 范围之外使用它。

我在 MATLAB 中尝试了具有相同逻辑的代码并且它有效。

实际代码的简化版本如下所示:

fn main() {
    let mut initiate = 1;
    let mut whilechecker = 2;

    while whilechecker > 0 {
        whilechecker = whilechecker - 1;

        if initiate == 1 {
            let mut vec1 = vec![2];
        }

        for i in &vec1 {
            if *i == 2 {
                break;
            }
        } //for

        initiate = 2;
        vec1.push(5);
    } //while
} //main

应该在vec1中放入一个素数列表。但由于它是简化的代码,它应该编译并提供一个向量 (vec1) 就足够了。 但是编译器说:

cannot find value vec1 in this scope

for i in &vec1{vec1.push(5);

你能编译吗?

没有理由进行复杂的 if initialize==1 检查。只需将向量的初始化移到 while 循环之外,这样它只完成一次:

fn main() {
    let mut whilechecker = 2;

    let mut vec1 = vec![2];
    while whilechecker > 0 {
        whilechecker = whilechecker - 1;
        for i in &vec1 {
            if *i == 2 {
                break;
            }
        } //for

        vec1.push(5);
    } //while
} //main

我没有得到你真正想要的东西。但这里有一个示例,可以帮助您定义全局范围变量。

fn main() {
    let mut initiate = 1;
    let mut whilechecker = 2;
    let mut vec1 = Vec::new();

    while whilechecker > 0 {
        if initiate == 1 {
            let mut vec1 = vec![2];
        }

        for i in &vec1 {
            if *i == 2 {
                break;
            }
        }

        initiate = 2;
        vec1.push(5);
        whilechecker = whilechecker - 1;
    }
    println!("{:?}", vec1);
}

给定代码的输出是:

[5, 5]