@@ -473,7 +473,7 @@ pub trait CryptoRng: RngCore {}
473
473
///
474
474
/// This is the primary trait to use when generating random values. Example:
475
475
///
476
- /// ```
476
+ /// ```rust
477
477
/// use rand::Rng;
478
478
///
479
479
/// fn use_rng<R: Rng>(rng: &mut R) -> f32 {
@@ -486,6 +486,31 @@ pub trait CryptoRng: RngCore {}
486
486
/// Since `Rng` extends `RngCore` and every `RngCore` implements `Rng`, usage
487
487
/// of the two traits is somewhat interchangeable.
488
488
///
489
+ /// Iteration over an `Rng` can be achieved using `iter::repeat` as follows:
490
+ ///
491
+ /// ```rust
492
+ /// use std::iter;
493
+ /// use rand::{Rng, thread_rng};
494
+ /// use rand::distributions::{Alphanumeric, Range};
495
+ ///
496
+ /// let mut rng = thread_rng();
497
+ ///
498
+ /// // Vec of 16 x f32:
499
+ /// let v: Vec<f32> = iter::repeat(()).map(|()| rng.gen()).take(16).collect();
500
+ ///
501
+ /// // String:
502
+ /// let s: String = iter::repeat(())
503
+ /// .map(|()| rng.sample(Alphanumeric))
504
+ /// .take(7).collect();
505
+ ///
506
+ /// // Dice-rolling:
507
+ /// let die_range = Range::new_inclusive(1, 6);
508
+ /// let mut roll_die = iter::repeat(()).map(|()| rng.sample(die_range));
509
+ /// while roll_die.next().unwrap() != 6 {
510
+ /// println!("Not a 6; rolling again!");
511
+ /// }
512
+ /// ```
513
+ ///
489
514
/// [`RngCore`]: trait.RngCore.html
490
515
pub trait Rng : RngCore + Sized {
491
516
/// Fill `dest` entirely with random bytes (uniform value distribution),
@@ -601,6 +626,8 @@ pub trait Rng: RngCore + Sized {
601
626
/// println!("{:?}", rng.gen_iter::<(f64, bool)>().take(5)
602
627
/// .collect::<Vec<(f64, bool)>>());
603
628
/// ```
629
+ #[ allow( deprecated) ]
630
+ #[ deprecated( since="0.5.0" , note="use iter::repeat instead" ) ]
604
631
fn gen_iter < T > ( & mut self ) -> Generator < T , & mut Self > where Uniform : Distribution < T > {
605
632
Generator { rng : self , _marker : marker:: PhantomData }
606
633
}
@@ -861,11 +888,14 @@ impl_as_byte_slice_arrays!(32, N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
861
888
/// [`gen_iter`]: trait.Rng.html#method.gen_iter
862
889
/// [`Rng`]: trait.Rng.html
863
890
#[ derive( Debug ) ]
891
+ #[ allow( deprecated) ]
892
+ #[ deprecated( since="0.5.0" , note="use iter::repeat instead" ) ]
864
893
pub struct Generator < T , R : RngCore > {
865
894
rng : R ,
866
895
_marker : marker:: PhantomData < fn ( ) -> T > ,
867
896
}
868
897
898
+ #[ allow( deprecated) ]
869
899
impl < T , R : RngCore > Iterator for Generator < T , R > where Uniform : Distribution < T > {
870
900
type Item = T ;
871
901
@@ -1219,14 +1249,6 @@ mod test {
1219
1249
assert_eq ! ( r. gen_weighted_bool( 1 ) , true ) ;
1220
1250
}
1221
1251
1222
- #[ test]
1223
- fn test_gen_vec ( ) {
1224
- let mut r = rng ( 106 ) ;
1225
- assert_eq ! ( r. gen_iter:: <u8 >( ) . take( 0 ) . count( ) , 0 ) ;
1226
- assert_eq ! ( r. gen_iter:: <u8 >( ) . take( 10 ) . count( ) , 10 ) ;
1227
- assert_eq ! ( r. gen_iter:: <f64 >( ) . take( 16 ) . count( ) , 16 ) ;
1228
- }
1229
-
1230
1252
#[ test]
1231
1253
fn test_choose ( ) {
1232
1254
let mut r = rng ( 107 ) ;
0 commit comments