gpt4 book ai didi

while-loop - 循环内的返回选项

转载 作者:行者123 更新时间:2023-11-29 08:05:14 25 4
gpt4 key购买 nike

该程序旨在使用循环来检查迭代器变量的索引是否满足特定条件(例如,索引 == 3)。如果找到所需的索引,则返回 Some(123),否则返回 None

fn main() {
fn foo() -> Option<i32> {
let mut x = 5;
let mut done = false;

while !done {
x += x - 3;

if x % 5 == 0 {
done = true;
}

for (index, value) in (5..10).enumerate() {
println!("index = {} and value = {}", index, value);

if index == 3 {
return Some(123);
}
}
return None; //capture all other other possibility. So the while loop would surely return either a Some or a None
}
}
}

编译器报错:

error[E0308]: mismatched types
--> <anon>:7:9
|
7 | while !done {
| ^ expected enum `std::option::Option`, found ()
|
= note: expected type `std::option::Option<i32>`
= note: found type `()`

我认为错误来源可能是 while 循环求值为 (),因此它会返回 () 而不是 Some(123) 。我不知道如何在循环中返回有效的 Some 类型。

最佳答案

任意 while true { ... } 的值表达式总是 () .所以编译器期望你的 foo返回 Option<i32>但在 foo 中找到最后一个值正文是 () .

要解决此问题,您可以添加 return None外原while环形。您还可以使用 loop像这样构建:

fn main() {

// run the code
foo();

fn foo() -> Option<i32> {
let mut x = 5;

loop {
x += x - 3;

for (index, value) in (5..10).enumerate() {
println!("index = {} and value = {}", index, value);

if index == 3 {
return Some(123);
}
}
if x % 5 == 0 {
return None;
}
}
}
}

while true { ... } 的行为声明可能有点古怪,并且有一些请求到 change it.

关于while-loop - 循环内的返回选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40708939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com