// 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::(None); let mut rng: Option = Some(rand::thread_rng()); let m2 = random_move_if(rng.as_mut()); println!("m1, m2 = {:?}, {:?}", m1, m2); } fn random_move_if(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 } }