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你的意思还不太清楚,我建议你提出一个新问题。