SeedableRng
有一个示例,但没有解释种子是什么。 搜索Seed
类型不提供详细信息。 在 GitHub 源目录中搜索也没有为我解决这个问题。
let seed: &[_] = &[1, 2, 3, 4];
let mut rng: StdRng = SeedableRng::from_seed(seed);
seed
必须是整数的四元素数组吗? 为什么?还能是别的吗?
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
// ^^^^^^^^
您可以在 rand crate 的文档中看到 SeedableRng
的所有实现者:
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
其他板条箱也可以定义具有不同种子类型的随机数生成器。