我是 Rust 新手。 如果有人能帮助我那就太好了。 第一个代码有效,但第二个代码无效。
#![allow(unused)]
fn main() {
let y = 3;
println!("{} Liftoff!", countdown(y));
}
fn countdown(mut y: u8) -> u8 {
let coun = loop {
println!("{}", y);
y -= 1;
if y == 1 {
return (y);
}
};
}
我以为
while
或for
会自动返回一个值。
如何在 while
或 for
循环中返回一个值?
#![allow(unused)]
fn main() {
let y = 3;
println!("{} Liftoff!", countdown(y));
}
fn countdown(mut y: u8) -> u8 {
while y != 0 {
y -= 1;
}
}
/*fn countdown () -> u8{
for y in (1..4).rev(){
}
}*/
let x = loop { /* ... */ };
。然而,在您的第一个代码片段中,您不会从循环中返回值(您试图将其分配给coun
),而是从函数返回。您可以将其重写为如下所示:fn countdown (mut y:u8)-> u8 {
loop {
println!("{}",y);
y-=1;
if y==1 {
break y;
}
} // notice the lack of semicolon here!
}
这里有一个返回
u8
(作为 en 表达式)的循环,然后从函数返回该值。
您可以使用
break
语句从循环表达式返回值。在第二个片段中没有 break
,因此这个 while
循环返回单位类型 ()
。由于这是函数中的最后一个表达式,rust 尝试返回它,并给你一个错误,因为你说这个函数应该返回 u8
,但你试图返回 ()
。要解决这个“问题”,您可以添加一个 break
语句,但是使用这样的 while
循环会很奇怪。
for
循环与loop
和while
有很大不同。您应该将其视为“对于每个”。您仍然可以使用 continue
和 break
语句。但是,您不能将 break
与值一起使用。 for
循环必须始终计算为()
。
let test = false;
let test2 = true;
let x = 'outer: loop {
'inner: loop {
if test {
break 'outer 42;
} else if test2 {
continue 'inner;
} else {
continue 'outer;
}
}
};
您可以在这里