For loop 在Rust中的if块内创建向量。if范围结束后如何使用?

For loop 在Rust中的if块内创建向量。if范围结束后如何使用?,for-loop,if-statement,rust,ownership,For Loop,If Statement,Rust,Ownership,我正在学习生锈。我试图计算一个素数列表,直到某个数字。为此,我需要在if块中创建一个向量(vec1),并在if的范围之外使用它 我在MATLAB中尝试了一个具有相同逻辑的代码,它运行正常 实际代码的简化版本如下所示: fn main() { let mut initiate = 1; let mut whilechecker = 2; while whilechecker > 0 { whilechecker = whilechecker - 1;

我正在学习生锈。我试图计算一个素数列表,直到某个数字。为此,我需要在
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)就足够了。 但编译器说:

在此范围内找不到值
vec1

在&vec1{和
vec1.push(5);


你能让它编译吗?

如果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]

您可能想将
let mut vec1=…
更改为
vec1=…
if
中;否则您只需对外部变量进行阴影处理(rustc给出两个警告,关于
vec1
不必要地
mut
和关于它未使用)。谢谢,它成功了。发布后大约比MATLAB快6倍。但是如果我们需要在if块内创建一个向量,并在if范围外使用它。你怎么做?在另一种查找素数的方法中,我需要创建一个向量,并在for循环之前使用它,在for循环内使用它,然后在for循环外再次使用它.let mut vec1=vec![4,5];vec1.push(6);for i in 1..4{vec1.push(6);}vec1.push(7);如果for循环中存在限制向量无限扩展的条件。我们如何编译上述代码?@Pandharinath你的意思还不太清楚,我建议你提出一个新问题。