我应该用 ; 结束表达式吗?在循环内?

2024-02-24

我刚开始学习 Rust,经常有一些找不到答案的问题。我真的不知道如何以及在哪里发布我的问题,所以我会尝试这样做。

我开始阅读网站上的 Rust 文档,并做了猜谜游戏示例。

我意识到match cmp循环内的表达式可以变成语句,并且一切仍然有效。所以我想知道为什么以及什么版本应该是真正的首选?

use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1, 101);

    loop {
        println!("Please input your guess.");

        let mut guess = String::new();

        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        println!("You guessed: {}", guess);

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        } // <=== here should it be ended as statement (;) or not?
    }
}

match, if, loop,以及其他具有{}Rust 编译器对块进行了特殊处理。当这些表达式出现时表达式语句 https://doc.rust-lang.org/reference/statements.html#expression-statements, 那是,not作为更大表达式的一部分,并且具有该块的表达式的类型是(),你不必把;在它之后将其与后面的语句分开。

表达式语句并非如此without块,它始终必须与以下语句(如果存在)分隔开;,即使他们的类型是().

因为这个规则的存在,这在 Rust 中很常见not to put ; after match, if, unsafe等,当它们仅用于副作用时,或之后for and while循环(始终仅用于副作用,因为它们总是返回()).

也就是说,rustfmt 和 Clippy 似乎都可以接受额外的功能;,因此,如果您出于美观原因更喜欢它,那么您不太可能通过使用它来冒犯任何人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该用 ; 结束表达式吗?在循环内? 的相关文章

随机推荐

  • 强制关闭电报上的弹出窗口“打开此链接?”

    当我在帖子中使用 html 格式并创建链接时 Telegram 会显示一个弹出窗口before打开链接 是否有脚本或其他东西可以强制关闭弹出窗口并立即打开链接 我不想插入链接没有 HTML 在单击链接之前 我按下 Enter 键 我使用 A
  • Android - 在 TextView 上显示带边框文本的方法?

    有没有办法在 TextView 上显示带边框的文本 我建议延长TextView http developer android com reference android widget TextView html See Android 自定
  • 如何在 MacBook Air 上的 iOS 模拟器中滚动?

    我有一个滚动视图和一个嵌入的 UIImageView 代码是正确的 但我无法在模拟器中滚动 可能是因为我有触控板 而不是鼠标 或者我可以吗 您需要启用 3 指拖动 从 Apple 菜单中选择 系统偏好设置 单击辅助功能图标 在侧边栏中选择
  • 如何禁用 openssl 中的特定密码套件?

    我想保护我的服务器免受 FREAK 攻击 因此我想禁用所有使用 Openssl 导出级 RSA 密钥的密码套件 有没有办法禁用 openssl 中的特定密码套件 如果是 我该怎么做 有没有办法禁用 openssl 中的特定密码套件 如果是
  • 内存限制=80M。 imagecreatefromjpeg() 的最大图像尺寸是多少?

    我有一个虚拟主机 最大内存限制为 80M 即 ini set memory limit 80M 我正在使用使用函数 imagecreatefromjpeg 的照片上传 当我上传大图片时出现错误 致命错误 允许的内存大小 83886080 字
  • 使用 then() 使函数在节点中顺序运行

    我想在序列总线中运行循环函数 该函数总是异步的 有什么方法可以使其同步而不使用回调或任何外部库 file 1 var db require promiseUnderStanding var fun function for var i 0
  • 如何求两个表的总和?

    我有两个表 第一个名称是 销售 第二个名称是 项目 两个表中都有相同的 code 和 qtd 列 我想编写 MYSQL 查询 我需要两个表中的 sum qtd 其中两个表中的代码相同 对于单表 我正在使用这个 按代码从销售组中选择代码 su
  • FORTRAN 95:是否可以在不共享源代码的情况下共享模块?

    我希望能够共享 FORTRAN 95 模块而不共享其源代码 是否可以这样做 也许通过共享 MOD 文件 如果这是相关的 我在 Plato 上使用 Silverfrost FTN95 编译器 到目前为止 我只能通过使用外部模块的源代码来完成这
  • 为什么 _mm_mulhrs_epi16() 总是进行有偏舍入到正无穷大?

    有谁知道为什么pmulhrsw指示或 mm mulhrs epi16 x RoundDown x y 16384 32768 总是向正无穷大舍入 对我来说 这对负数有很大的偏差 因为像 0 6 0 6 0 6 0 6 这样的序列平均起来不会
  • C++ 矢量 和套接字

    有没有办法调用 send recv 传递向量 在 C 中缓冲套接字数据的好习惯是什么 例如 读取直到 r n 或直到 upper bound 4096 字节 std vector
  • Rails错误resource_name - devise帮助路由和渲染

    我正在尝试渲染 Devise gem 的登录视图 但出现错误 下面是我当前拥有的代码 这是我的views users shared links html erb br br
  • C# SerialPort.IsOpen 在物理断开连接时返回 true

    当物理断开 USB 端口上的串行电缆时 C SerialPort IsOpen 返回 true 任何人都可以帮助我如何克服这个问题 这不是串行端口的工作方式 它们没有像 TCP 这样的标准面向连接的协议 IsOpen 名称的选择并非偶然 它
  • 为什么我的反应本机组件重叠

    我想将 2 个组件放置在彼此下方 我的组件如下所示 import React from react import connect from react redux import Text StyleSheet View ListView S
  • WPF:删除样式列表框中焦点项目周围的虚线边框

    我有一个带有自定义 controlIemplate 的水平列表框 选定的项目在聚焦时会出现一个虚线框 有人知道如何摆脱它吗 您需要将每个 ListBoxItem 的 FocusVisualStyle 设置为 null 步骤如下 1 为Lis
  • Keras:可视化 ImageDataGenerator 输出

    我想看看我的 ImageDataGenerator 为我的网络带来了什么 Edit 删除了channel shift range 不小心将其留在了代码中 发电机 genNorm ImageDataGenerator rotation ran
  • 在Java中将位图图像转换为未压缩的tif图像

    我正在尝试将位图图像转换为未压缩的 tif 文件 以便与 Tesseract OCR 引擎一起使用 我可以使用这种方法来生成压缩的tif文件 final BufferedImage bmp ImageIO read new File inp
  • 将 ereg_replace 转换为 preg_replace

    我必须转换一个ereg replace to preg replace ereg replace 代码是 ereg replace 0 9 36 1 value 由于 preg 由开始和结束反斜杠表示 我假设转换为 preg replace
  • JQuery Mobile 在 Android 上看到黑色覆盖块

    我当前创建了一个使用 JQueryMobile 和 Phonegap 构建的示例应用程序 它是一个简单的应用程序 没有什么特别的 它旨在在 Android 平台上运行 适用于手机和平板电脑 我的应用程序上有一个页面 显示一个带有黑色 透明背
  • 使用jquery更改rgba alpha透明度[重复]

    这个问题在这里已经有答案了 可能的重复 jQuery RGBA 颜色动画 https stackoverflow com questions 3242368 jquery rgba color animations hey 我想更改悬停时
  • 我应该用 ; 结束表达式吗?在循环内?

    我刚开始学习 Rust 经常有一些找不到答案的问题 我真的不知道如何以及在哪里发布我的问题 所以我会尝试这样做 我开始阅读网站上的 Rust 文档 并做了猜谜游戏示例 我意识到match cmp循环内的表达式可以变成语句 并且一切仍然有效