RUST 中其他函数中的 While 循环或 For 循环

问题描述 投票:0回答:2

我是 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(){

    }
}*/
loops for-loop rust while-loop
2个回答
1
投票
  1. 循环是 Rust 中的表达式。这意味着您可以写
    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 表达式)的循环,然后从函数返回该值。

  1. 您可以使用

    break
    语句从循环表达式返回值。在第二个片段中没有
    break
    ,因此这个
    while
    循环返回单位类型
    ()
    。由于这是函数中的最后一个表达式,rust 尝试返回它,并给你一个错误,因为你说这个函数应该返回
    u8
    ,但你试图返回
    ()
    。要解决这个“问题”,您可以添加一个
    break
    语句,但是使用这样的
    while
    循环会很奇怪。

  2. for
    循环与
    loop
    while
    有很大不同。您应该将其视为“对于每个”。您仍然可以使用 continue
    break
    语句。但是,您不能将
    break
    与值一起使用。
    for
    循环必须始终计算为
    ()
    
    

  3. 奖金

您知道可以给循环添加标签吗?当您有嵌套循环时(例如,当您有主游戏循环且其中有事件队列循环时),这非常有用。这意味着您可以编写如下所示的代码:

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; } } };

您可以在
这里

阅读有关循环表达式循环标签的详细文档。


0
投票
	
© www.soinside.com 2019 - 2024. All rights reserved.