NLinker icon

Generic random with Option

NLinker | PRO | 07/06/18 01:11:24 PM UTC | 0 ⭐ | 947 👁️ | Never ⏰ | []
Rust |

860 B

|

None

|

0 👍

/

0 👎

// https://play.rust-lang.org/?gist=00a5ed94a488279e73167c48c444761c
// Fix
 
extern crate rand;
 
use rand::prelude::{Rng, ThreadRng};
 
#[derive(Clone, Copy, Eq, PartialEq, Debug)]
pub enum Move {
    Right, Up, Left, Down, Stop,
}
 
fn main() {
    
    let m1 = random_move_if::<ThreadRng>(None);
    
    let mut rng: Option<ThreadRng> = Some(rand::thread_rng());
    let m2 = random_move_if(rng.as_mut());
    
    println!("m1, m2 = {:?}, {:?}", m1, m2);
 
}
 
fn random_move_if<R: Rng>(random: Option<&mut R>) -> Move {
    let moves = vec![Move::Right, Move::Up, Move::Left, Move::Down];
 
    // match random {
    //     None => Move::Stop,
    //     Some(r) => moves[r.gen_range(0, moves.len())],
    // }
    if random.is_some() {
        let r = random.unwrap();
        moves[r.gen_range(0, 4)]
    } else {
        Move::Stop
    }
}

Comments