猜谜游戏,阴影猜谜绑定的错误



我正在遵循 Rust 教程,但我被困在这段代码上(页面中的最后一个片段):

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方法的计算结果为一个值。此表达式后不应跟块,从而导致编译器报告的语法错误。

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

您链接到的示例在分配和调用 parse 之间具有关键字 matchmatch 关键字采用表达式并根据表达式的值进行分支。该块包含分支模式和表达式。在这种情况下,它还将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,
};

在调用guess.trim().parse()之前,您忘记添加 match 关键字该行应如下所示: let guess : u32 = match guess.trim().parse() {...

来源: https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html

相关内容

最新更新