rust - 猜谜游戏,阴影猜测绑定(bind)时出错

标签 rust

我正在关注 Rust tutorial但我坚持使用这段代码(页面中的最后一个片段):

extern crate rand;

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

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

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

    println!("The secret number is {}", secret_number);

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

当我运行 cargo run 时出现以下错误:

src/main.rs:23:47: 23:48 error: expected one of `.`, `;`, or an operator, found `{`
src/main.rs:23         let guess: u32 = guess.trim().parse() {
                                                             ^

什么是正确的语法?

最佳答案

存在语法错误,编译器消息将您的注意力引到行中的错误位置以解决问题。

parse 方法计算出一个值。该表达式后面不能跟 block ,导致编译器报语法错误。

https://doc.rust-lang.org/std/string/struct.String.html#method.parse

您链接到的示例在分配和调用 parse 之间具有关键字 matchmatch 关键字采用表达式并根据表达式的值进行分支。该 block 包含分支模式和表达式。在这种情况下,它还将 Result 解构为 u32u32::Err

https://doc.rust-lang.org/book/match.html

为了清楚起见,下面是一个将解析和匹配分开的示例。

// Store result of parsing in a variable
let parse_result = guess.trim().parse();
// Destructure the result
let guess: u32 = match parse_result {
    // If parse succeeded evaluate to the number
    Ok(num) => num,
    // If parse failed repeat the loop
    Err(_) => continue,
};

关于rust - 猜谜游戏,阴影猜测绑定(bind)时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36139896/

相关文章:

rust - 如何将特征类型与基板模块中的字符串类型进行比较?

rust - 如何从切片中复制最后一个元素

dictionary - 如何重命名serde_json::Map中的所有键?

generics - 有没有办法为智能指针中的对象通用地实现一个特征?

rust - 如何增加绑定(bind)的生命周期

rust - `use` 此源文件中未直接使用的特征所需的语句 : why?

rust - 在 Rust 中返回一个引用和被引用的对象

python - 使用 PyO3 将列表列表作为参数从 Python 传递给 Rust

windows - 在 Windows 上安装 Rust 以开发 GUI 应用程序

windows - 如何将非缓冲写入标准输出?