繁体   English   中英

铁锈书,猜测游戏不匹配的类型

[英]Rust book, guessing game mismatched types

我正在关注1.1.0的锈书教程,但是尝试运行他们的代码我遇到了错误。

我有以下内容:

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有一个强大的静态类型系统。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM