这是一个简单的 rust 码,来自Ruust网站上的Rustbook. 在Rust 中,如果连线没有";",最后它的作用就像一个回车.

  1. 在本例中,行 break counter * 2;个 这有没有回报价值,为什么?

  2. 如果我go 掉这一行中的";",我得到了相同的结果,为什么?

  3. 即使我在下一行加上这个";",我的意思是};,我得到的结果也是一样的,为什么?

我试着理解它,但不能理解这个逻辑.

fn main() {
    let mut counter = 0;

    let result = loop {
        counter += 1;

        if counter == 10 {
            break counter * 2;
        }
    };

    println!("Zmienna result wynosi {result}");
}

推荐答案

当达到break EXPRESSION时,immediately terminates the closest loop1(即将程序流移到恰好在循环结束括号}之后),整个loop {…}的计算结果为EXPRESSION(在您的示例中总是counter * 2=10 * 2=20),它之后的值根本不重要.


1:或forwhile,但它们不允许break与表达式一起使用,因此会导致编译器错误

Rust相关问答推荐

什么是谓词的简短和简洁类型

如何在原始字符串中转义";#和#";

同时从不同线程调用DLL的不同函数会出现分段错误或产生STATUS_STACK_BUFFER_OVERRUN

为什么TcpListener的文件描述符和生成的TcpStream不同?

为什么这个变量不需要是可变的?

在0..1之间将U64转换为F64

如何初始化选项<;T>;数组Rust 了?

由于生存期原因,返回引用的闭包未编译

Rust 异步循环函数阻塞了其他future 任务的执行

Rust 生命周期:这两种类型声明为不同的生命周期

错误:将自定义 proc_macro 与用Rust 的宝贝编写的属性一起使用时,无法在此范围内找到属性

如何判断服务器是否正确接收数据

使用 traits 时,borrow 的值不会存在足够长的时间

为什么 Rust 允许写入不可变的 RwLock?

为什么具有 Vec 变体的枚举没有内存开销?

为什么 Rust 编译器在移动不可变值时执行复制?

如何异步记忆选项中的 struct 字段

如何在 C++ 和 Rust 之间共享 pthread 同步原语?

在 Rust 中返回对枚举变体的引用是个好主意吗?

为什么 `ref` 会导致此示例*取消引用*一个字段?