Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops Rust如何知道何时停止在没有上限的范围内迭代?_Loops_Rust_Iterator_Range_Infinite Loop - Fatal编程技术网

Loops Rust如何知道何时停止在没有上限的范围内迭代?

Loops Rust如何知道何时停止在没有上限的范围内迭代?,loops,rust,iterator,range,infinite-loop,Loops,Rust,Iterator,Range,Infinite Loop,对于上的Rust练习,我发现一些解决方案选择在没有上限的范围内filter() 下面是一个例子: pub-fn-nth(n:u32)->u32{ 设mut primes=Vec::具有_容量((n为usize)+1); (2..) .filter(|候选者|{ if!primes.iter().any(|i |候选%i==0){ primes.push(*候选者); 真的 }否则{ 假的 } }) .nth(n作为使用) .unwrap() } 我想知道在这种情况下,Rust何时停止在该范围内

对于上的Rust练习,我发现一些解决方案选择在没有上限的范围内
filter()

下面是一个例子:

pub-fn-nth(n:u32)->u32{
设mut primes=Vec::具有_容量((n为usize)+1);
(2..)
.filter(|候选者|{
if!primes.iter().any(|i |候选%i==0){
primes.push(*候选者);
真的
}否则{
假的
}
})
.nth(n作为使用)
.unwrap()
}

我想知道在这种情况下,Rust何时停止在该范围内迭代。它是否可以迭代到类型的最大值,或者它是否可以通过检查迭代器后面的代码(例如,通过检查
.unwrap()
在示例中没有死机)来确定何时可以停止迭代?

这是由于使用了。此方法将调用迭代器上的
next
方法精确地
n次,然后停止。

迭代器中的
s被惰性地评估,因此,如果您无限多次地调用该方法,它们只会“转到无穷远”<代码>迭代器
方法,如and和内部调用
next
有限次,因此没有问题

但是,如果您在非终止循环中迭代
迭代器
,并且
迭代器
生成一些原始数字类型,那么当您尝试迭代器超过该类型可表示的最大值时,最终会遇到溢出。示例程序:

fn main(){
对于uuin(usize::MAX-1..){
println!(“计数…”);
}
}
运行时恐慌:

线程'main'在'trust to add with overflow'时惊慌失措,/rustc/7eac88abb2e57e752f3302f022be5f3ce3d7adfb4/library/core/src/ops/arith.rs:107:1
但这并不意味着不可能永远迭代!一些方法(如)允许您创建一个无限重复的序列,该序列实际上将永远持续,直到您手动终止程序:

fn main(){
设a=[1,2,3];
设mut infinite_123=a.iter().cycle();
对于无穷大中的u 123{
println!(“哦,永远的循环”);
}
}

请注意,溢出死机仅在调试模式下发生。在释放模式下,它将永远循环。