【问题标题】:Rust book, guessing game mismatched types锈书,猜谜游戏不匹配类型
【发布时间】:2015-09-13 16:52:31
【问题描述】:

我正在关注 1.1.0 的 rust book 教程,但尝试运行他们的代码时出现错误。

我有以下几点:

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);

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

    let mut guess = String::new();

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

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

    match guess.cmp(&secret_number) {
        Ordering::Less    => println!("Too small!"),
        Ordering::Greater => println!("Too big!"),
        Ordering::Equal   => println!("You win!"),
    }
}

运行后我得到

src/main.rs:24:21: 24:35 error: mismatched types:
 expected `&collections::string::String`,
    found `&_`
(expected struct `collections::string::String`,
    found integral variable) [E0308]
src/main.rs:24     match guess.cmp(&secret_number) {
                                   ^~~~~~~~~~~~~~
src/main.rs:24:21: 24:35 help: run `rustc --explain E0308` to see a detailed explanation

这段代码是教程直接复制粘贴的,有什么问题?

【问题讨论】:

    标签: rust


    【解决方案1】:

    没有错。该教程实际上解释了为什么这不会编译:

    不过,我确实提到过这还不能奏效。让我们尝试一下: ... 哇!这是一个 大错误。它的核心是我们有“不匹配的类型”。锈有 一个强大的静态类型系统。

    【讨论】:

    • @SyntacticFructose 没问题 :)
    • 我尝试按照教程两次并发现此错误...两次。当我读到这个两年前的问题时,我对 rust doc 如此错误感到非常失望......我从未检查过教程的下一段!
    • 一点也不落后,这是一个糟糕的写教程的方式!在不得不在需要重新启动计算机以识别 Cargo.toml 文件更改的 rust cargo bug 上浪费数小时后遇到了同样的事情。
    【解决方案2】:

    您正在尝试比较字符串和整数。您需要先将用户输入转换为整数。

    将此行添加到您的代码中,它应该可以工作:

    let guess: u32 = guess.trim().parse().unwrap();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 2020-11-22
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多