【问题标题】:What are the possible types/values for the SeedableRng Seed?SeedableRng 种子的可能类型/值是什么?
【发布时间】:2018-03-17 23:07:38
【问题描述】:

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

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

seed 必须是一个四元素整数数组吗?为什么?可以是别的吗?

【问题讨论】:

    标签: rust


    【解决方案1】:

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多