SeedableRng种子有哪些可能的类型/值?

时间:2018-03-17 23:07:39

标签: rust

SeedableRngan example,但没有关于种子是什么的解释。 Searching for the Seed type未提供详细信息。在GitHub源目录中搜索也没有为我清除这一点。

let seed: &[_] = &[1, 2, 3, 4];
let mut rng: StdRng = SeedableRng::from_seed(seed);

seed必须是四元素的整数数组吗?为什么?它可以是其他什么吗?

1 个答案:

答案 0 :(得分:4)

Seed可以是特质实施者决定的任何类型,它是定义为特质本身一部分的泛型类型:

pub trait SeedableRng<Seed>: Rng {
//                    ^^^^
    fn reseed(&mut self, _: Seed);
    fn from_seed(seed: Seed) -> Self;
}

Isaac64Rng使用u64切片:

impl<'a> SeedableRng<&'a [u64]> for Isaac64Rng
//                   ^^^^^^^^^

XorShiftRng正好使用4 u32

impl SeedableRng<[u32; 4]> for XorShiftRng
//               ^^^^^^^^

您可以看到all the implementers of SeedableRng from inside the rand crate in its documentation

impl<S, R: SeedableRng<S>, Rsdr: Reseeder<R> + Default> SeedableRng<(Rsdr, S)> for ReseedingRng<R, Rsdr>
impl<'a> SeedableRng<&'a [u32]> for ChaChaRng
impl<'a> SeedableRng<&'a [u32]> for IsaacRng
impl<'a> SeedableRng<&'a [u64]> for Isaac64Rng
impl SeedableRng<[u32; 4]> for XorShiftRng
impl<'a> SeedableRng<&'a [usize]> for StdRng

其他板条箱也可以定义具有不同种子类型的随机数生成器。