2016-07-09 10 views
1

Ich versuche, einen Vektor mit den Zahlen 48 bis 57 zu erstellen und dann nach dem Zufallsprinzip mischen. Ich laufe in die folgenden FehlerIch kann keinen Vektor erstellen und mischen

error: the type of this value must be known in this context 
     let &mut slice = secret_num.as_mut_slice(); 
         ^~~~~~~~~~~~~~~~~~~~~~~~~ 
error: no method named `shuffle` found for type `rand::ThreadRng` in the current scope 
     rng.shuffle(&mut slice); 
      ^~~~~~~ 

Hier ist der Code:

extern crate rand; 

fn main() { 
    //Main game loop 
    loop{ 
     let mut secret_num = (48..58).collect(); 
     let &mut slice = secret_num.as_mut_slice(); 
     let mut rng = rand::thread_rng(); 
     rng.shuffle(&mut slice);            
     println!("{:?}", secret_num); 
     break; 
    } 
    println!("Hello, world!"); 
} 

Antwort

5
  1. collect Bedürfnisse zu wissen, welche Art Sie wollen in sammeln. Von den Blicken von ihm, wollen Sie ein Vec:

    let mut secret_num: Vec<_> = (48..58).collect(); 
    
  2. Sie wollen nicht &mut in der Deklaration dieser Variablen verwenden, da die slice eine unsized Art machen würde, die nicht gültig zu haben. In der Tat ist diese Zeile redundant.

    let &mut slice = secret_num.as_mut_slice(); 
    
  3. Merkmale müssen in den Geltungsbereich einbezogen werden. Die Fehlermeldung, die Sie bereits erhalten sollte Ihnen dies bereits sagen. Rust hat die meiste Zeit ziemlich gute Fehlermeldungen. Sie sollten sie lesen:

    help: items from traits can only be used if the trait is in scope; 
         the following trait is implemented but not in scope, 
         perhaps add a `use` for it: 
    help: candidate #1: `use rand::Rng` 
    
  4. Es gibt keine Notwendigkeit für eine loop überhaupt; entfernen Sie es. Produzieren Sie eine MCVE, wenn Sie eine Frage stellen, die Ihnen hilft, die Ursache des Problems zu verstehen, und andere, um sie zu beantworten. In Ihrem echten Programm sollten Sie den Zufallszahlengenerator einmal vor der Schleife erhalten, um Overhead zu vermeiden.

extern crate rand; 

use rand::Rng; 

fn main() { 
    let mut secret_num: Vec<_> = (48..58).collect(); 
    let mut rng = rand::thread_rng(); 

    rng.shuffle(&mut secret_num); 

    println!("{:?}", secret_num); 
} 
Verwandte Themen