无法创建矢量并将其随机播放

时间:2016-07-09 19:40:02

标签: random rust

我正在尝试创建一个数字为48到57的向量,然后随机随机播放它。我遇到了以下错误

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

以下是代码:

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

1 个答案:

答案 0 :(得分:5)

  1. collect需要知道您希望收集的类型。从它的外观来看,你想要一个Vec

    let mut secret_num: Vec<_> = (48..58).collect();
    
  2. 您不希望在此变量的声明中使用&mut,因为这会使slice成为未归类的类型,而这种类型无效。事实上,这条线是多余的。

    let &mut slice = secret_num.as_mut_slice();
    
  3. 必须将特征纳入范围。您已经获得的错误消息应该已经告诉您了。 Rust大多数时候都有很好的错误消息。你应该阅读它们:

    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. 根本不需要loop;去掉它。在提问时帮助您了解问题的根源以及其他人来回答问题,请生成MCVE。在你的真实程序中,你应该在循环之前获得随机数生成器一次以避免开销。

  5. 由于您最初提出这个问题,rand重组了他们的代码。 shuffle现已成为SliceRandom特征的一部分。

  6. use rand::seq::SliceRandom; // 0.6.5
    
    fn main() {
        let mut secret_num: Vec<_> = (48..58).collect();
        let mut rng = rand::thread_rng();
    
        secret_num.shuffle(&mut rng);
    
        println!("{:?}", secret_num);
    }