2015-06-26 11 views
6

Podążam za tutorialem rdzy dla wersji 1.1.0, ale próbując uruchomić kod, otrzymuję komunikat o błędzie.Książka rdzewiejąca, gra niepoprawna typu

Mam następujący:

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

na prowadzenie tego mam

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 

Ten kod jest bezpośrednio kopiować wklejony z samouczka, co się dzieje?

Odpowiedz

12

Nic nie jest nie tak. Samouczek wyjaśnia, dlaczego to się nie skompiluje:

Wspomniałem, że to jeszcze nie zadziała. Spróbujemy: ... Whew! To jest duży błąd . Najważniejsze jest to, że mamy "niedopasowane typy". Rust ma silny, statyczny system typu.

+1

okrzyki myślę im opóźniony. Dzięki –

+0

@SyntacticFructose nie ma problemu :) – bedwyr

+0

Próbowałem wykonać dwukrotnie tutorial i znalazłem ten błąd ... dwa razy. Kiedy przeczytałem to dwuletnie pytanie, poczułem się bardzo rozczarowany, że dokumentacja rdzy jest tak zła ... Nigdy nie sprawdzałem następnego akapitu tutoriala! – licorna

1

Próbujesz porównać ciąg i liczbę całkowitą. Najpierw musisz przesłać dane wejściowe użytkownika do liczby całkowitej.

Dodaj tę linię do kodu i to powinno działać:

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