2015-06-26 7 views
6

Sto seguendo il tutorial del libro di ruggine per la versione 1.1.0, ma provando a eseguire il loro codice, sto ricevendo un errore.Rust book, tipi indecisi di giochi indovinati

Ho il seguente:

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!"), 
    } 
} 

su esecuzione di questo ottengo

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 

Questo codice è direttamente copia incollato dal tutorial, cosa c'è di sbagliato?

risposta

12

Niente è sbagliato. Il tutorial in realtà spiega perché questo non verrà compilato:

Ho già detto che non funzionerà ancora del tutto. Proviamo: ... Whew! Questo è un grande errore . Il nocciolo della questione è che abbiamo "tipi non corrispondenti". Rust ha un sistema di tipo statico forte.

+1

whoops penso im ritardato. Grazie –

+0

@SyntacticFructose nessun problema :) – bedwyr

+0

Ho provato a seguire il tutorial due volte e ho trovato questo errore ... due volte. Quando ho letto questa domanda di due anni mi sono sentito molto deluso dal fatto che il ruggine fosse così sbagliato ... Non ho mai controllato il prossimo paragrafo del tutorial! – licorna

1

Si sta tentando di confrontare stringa e numero intero. Devi prima eseguire l'input dell'utente su intero.

Aggiungi questa riga al codice e dovrebbe funzionare:

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