Rust学习-循环(loop、while、for)

循环

1.1 loop

  在Rust中,使用loop表示一个无限死循环。示例如下:

fn main() {
    let mut count = 0u32;
    println!("Let's count until infinity!");

    // 无限循环
    loop {
        count += 1;

        if count == 3 {
           println!("three");

           // 不再继续执行后面的代码,跳转到loop开头继续循环
           continue; 
        }

        println!("{}", count);
        if count == 5 {
            println!("OK, that's enough");

            // 跳出循环
            break;
        }
    }
}

  其中,我们可以使用continue和break控制执行流程。continue;语句表示本次循环内,后面的语句不再执行,直接进入下一论循环。break;语句表示跳出循环,不再继续。
  另外,break语句和continue语句还可以在多重循环中选择跳出到哪一层的循环

fn partice2() {
    let mut m = 1;
    let n = 1;

    'a: loop {
        if m < 100 {
            m += 1;

        } else {
            loop {
                if m + n > 50 {
                    println!("break");
                    break 'a;

                } else {
                    continue 'a;

                }
            }
        }
    }
}

  我们可以在loop、while、for循环前面加上声明周期标识符。该标识符以单引号开头,在内部的循环中可以使用break语句选择跳出到哪一层。
  与if结构一样,loop结构也可以作为表达式的一部分。

fn main() { 
    let v = loop {
        break 10;
    };
    
    println!("{}", v);
}

  在loop内部break的后面可以跟一个表达式,这个表达式就是最终的loop表达式的值。如果一个loop永远不返回,那么它的类型就是发散类型。示例如下:

fn main() {
    let v = loop {};
    println!("{}", v);
}

编译器可以判断出v的类型是发散类型,而后面的打印语句是永远不会执行的死代码。

1.2 while

  while语句是带条件判断的循环语句。其语法是while关键字后跟条件判断语句,最后是结果语句块。如果条件满足,则持续循环执行结果语句块。示例如下:

fn partice1() {
    let mut n = 1;
    
    while n < 101 {
        if n % 15 == 0 {
            println!("fizzbuzz");
        } else if n % 3 == 0 {
            println!("fizz");
        } else if n % 5 == 0 {
            println!("buzz");
        }else {
            println!("{}", n);
        } 

        n += 1;
    }
}

同理,while语句中也可以使用continue和break来控制循环流程。
  那么loop {}while true {}循环有什么区别,为什么Rust专门设计了一个死循环,loop语句难道不是完全多余的么?
  实际上不是。主要原因在于,相比于其他的许多语言,Rust语言要做更多的静态分析。loop和while true语句在运行时没有什么区别,他们主要是会影响编译器内部的静态分析结果。比如:

let x;
loop { x = 1; break; }
println!("{}", x)

  以上语句在Rust中完全合理。因为编译器可以通过流程分析推理出x=1;必然在println!之前执行过,因此打印变量x的值是完全合理的。而下面的代码是编译不过的:

let x;
while true { x = 1; break; }
println!("{}", x);

  因为编译器会觉得while语句的执行跟条件表达式在运行阶段的值有关,因此它不确定x是否一定会初始化,于是它决定给出一个错误: use of possibly uninitialized variable,也就是说变量x可能没有初始化。

1.3 for

  Rust中的for循环实际上是许多其他语言中的for-each循环。Rust中没有类似C/C++的三段式for循环语句。举例如下:

fn partice1() {
    let array = &[1, 2, 3, 4, 5];

    for i in array{
        println!("The numver is {}", i)
    }
}

  for循环的主要用处是利用迭代器对包含同样类型的多个元素的容器执行遍历,如数组、链表、HashMap、HashSet等。在Rust中,我们可以很轻松的定制容器和迭代器,因此也很容易使for循环也支持自定义类型。
  for循环内部也可以使用continue和break控制执行流程。

正序输出1-10

fn partice2() {
    for num in 1..10 {
        println!("number is :{num}")
    }
}

倒序输出1-10

fn partice3() {
    for num in (1..10).rev() {
        println!("number is :{num}")
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mac Rust io-uring是一种在Mac操作系统上使用Rust语言进行开发的io-uring库。 io-uring是Linux内核中的一个新特性,它为应用程序提供了一种高性能、高效率的异步I/O操作方式。它通过使用事件驱动和无锁技术,实现了在高并发环境下进行文件操作的优化。io-uring提供了更低的系统开销和更高的吞吐量,特别适用于需要大量I/O操作的应用程序。 虽然io-uring最初是为Linux内核设计的,但由于其高性能的特性,一些开发者试图将其移植到其他操作系统上。其中,Mac Rust io-uring就是一个在Mac操作系统上使用Rust语言实现io-uring的库。 使用Mac Rust io-uring,开发者可以在Mac环境下利用io-uring的特性来提高文件操作的性能。这对于需要进行大量I/O操作的应用程序来说,是一个很有价值的工具。例如,对于数据库、Web服务器或文件传输等应用,通过使用Mac Rust io-uring,可以显著提高其性能和吞吐量。 Mac Rust io-uring不仅提供了对io-uring的封装,还提供了一些更高级别的功能和接口,以方便开发者使用。开发者可以使用Mac Rust io-uring来实现一些高级的文件操作,例如批量读取或写入文件,提高数据处理的效率。 总之,Mac Rust io-uring是一个在Mac操作系统上使用Rust语言开发的io-uring库,它能够为开发者提供高性能的异步I/O操作方式,从而提高应用程序的性能和吞吐量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值