Enums 任何迭代。 pub enum Spinners { Dots, Dots2, Dots3, Dots4, ... Shark, Dqpb, Weather, Christmas, }
任何迭代。Enums 任何迭代。 pub enum Spinners { Dots, Dots2, Dots3, Dots4, ... Shark, Dqpb, Weather, Christmas, } ,enums,rust,Enums,Rust,任何迭代。 pub enum Spinners { Dots, Dots2, Dots3, Dots4, ... Shark, Dqpb, Weather, Christmas, } extern crate spinners; use spinners::{Spinner, Spinners}; use std::thread::sleep; use std::time::Duration; fn main() {
pub enum Spinners {
Dots,
Dots2,
Dots3,
Dots4,
...
Shark,
Dqpb,
Weather,
Christmas,
}
extern crate spinners;
use spinners::{Spinner, Spinners};
use std::thread::sleep;
use std::time::Duration;
fn main() {
let sp = Spinner::new(Spinners::Dots9, "Waiting for 3 seconds".into());
sleep(Duration::from_secs(3));
sp.stop();
}
let spinner_enum = rng.choose(Spinners).unwrap_or(&Spinners::Dots9);
use rand::{
distributions::{Distribution, Standard},
Rng,
}; // 0.8.0
#[derive(Debug)]
enum Spinner {
One,
Two,
Three,
}
impl Distribution<Spinner> for Standard {
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Spinner {
// match rng.gen_range(0, 3) { // rand 0.5, 0.6, 0.7
match rng.gen_range(0..=2) { // rand 0.8
0 => Spinner::One,
1 => Spinner::Two,
_ => Spinner::Three,
}
}
}
fn main() {
let spinner: Spinner = rand::random();
println!("{:?}", spinner);
}
extern crate rand; // 0.4.2
use rand::{Rand, Rng};
#[derive(Debug)]
enum Spinner {
One,
Two,
Three,
}
impl Rand for Spinner {
fn rand<R: Rng>(rng: &mut R) -> Self {
match rng.gen_range(0, 3) {
0 => Spinner::One,
1 => Spinner::Two,
_ => Spinner::Three,
}
}
}
fn main() {
let mut rng = rand::thread_rng();
let spinner: Spinner = rng.gen();
println!("{:?}", spinner);
}
extern crate rand;
#[macro_use]
extern crate rand_derive;
use rand::Rng;
#[derive(Debug, Rand)]
enum Spinner {
One,
Two,
Three,
}
fn main() {
let mut rng = rand::thread_rng();
let spinner: Spinner = rng.gen();
println!("{:?}", spinner);
}
use rand::seq::SliceRandom; // 0.8.0
mod another_crate {
#[derive(Debug)]
pub enum Spinner {
One,
Two,
Three,
}
}
fn main() {
let mut rng = rand::thread_rng();
let spinners = [
another_crate::Spinner::One,
another_crate::Spinner::Two,
another_crate::Spinner::Three,
];
let spinner = spinners.choose(&mut rng).unwrap();
println!("{:?}", spinner);
}
use rand::{
distributions::{Distribution, Standard},
Rng,
}; // 0.8.0
mod another_crate {
#[derive(Debug)]
pub enum Spinner {
One,
Two,
Three,
}
}
enum Spinner {
One,
Two,
Three,
}
impl From<Spinner> for another_crate::Spinner {
fn from(other: Spinner) -> another_crate::Spinner {
match other {
Spinner::One => another_crate::Spinner::One,
Spinner::Two => another_crate::Spinner::Two,
Spinner::Three => another_crate::Spinner::Three,
}
}
}
impl Distribution<Spinner> for Standard {
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Spinner {
match rng.gen_range(0..=2) {
0 => Spinner::One,
1 => Spinner::Two,
_ => Spinner::Three,
}
}
}
fn main() {
let spinner = another_crate::Spinner::from(rand::random::<Spinner>());
println!("{:?}", spinner);
}
use rand::Rng; // 0.8.0
mod another_crate {
#[derive(Debug)]
pub enum Spinner {
One,
Two,
Three,
}
}
fn rando<R: Rng>(mut rng: R) -> another_crate::Spinner {
match rng.gen_range(0..=2) {
0 => another_crate::Spinner::One,
1 => another_crate::Spinner::Two,
_ => another_crate::Spinner::Three,
}
}
fn main() {
let mut rng = rand::thread_rng();
let spinner = rando(&mut rng);
println!("{:?}", spinner);
}
use rand::{distributions::Standard, prelude::*}; // 0.8.0
mod another_crate {
#[derive(Debug)]
pub enum Spinner {
One,
Two,
Three,
}
}
struct RandoSpinner(another_crate::Spinner);
impl Distribution<RandoSpinner> for Standard {
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> RandoSpinner {
RandoSpinner(match rng.gen_range(0..=2) {
0 => another_crate::Spinner::One,
1 => another_crate::Spinner::Two,
_ => another_crate::Spinner::Three,
})
}
}
fn main() {
let RandoSpinner(spinner) = rand::random();
println!("{:?}", spinner);
}
use rand::prelude::*;
#[derive(EnumIter)]
enum Spinner { ... }
let mut rng = thread_rng();
let options = Spinner::iter().collect::<Vec<_>>();
let choice = rng.choose(&options);
// or:
let index = rng.gen_range(0, MAX);
let choice = Spinner::iter().enumerate().filter(|(i, _)| i == index).map(|(_, x)| x).next().unwrap();
// with Rand 0.6, though this may be slow:
let choice = Spinner::iter().choose(&mut rng);
// collecting may be faster; in Rand 0.6 this becomes:
let choice = Spinner::iter().collect::<Vec<_>>().choose(&mut rng);
#[derive(FromPrimitive)]
enum Spinner { ... }
let choice = Spinner::from_u32(rng.gen_range(0, MAX)).unwrap();