SeedableRng有一个例子,但没有解释种子是什么。 搜索Seed类型不提供详细信息。在 GitHub 源目录中搜索也没有为我解决这个问题。
let seed: &[_] = &[1, 2, 3, 4];
let mut rng: StdRng = SeedableRng::from_seed(seed);
Run Code Online (Sandbox Code Playgroud)
是否seed必须是一个四元素的整数数组?为什么?可以是别的吗?
Seed 可以是特征的实现者决定的任何类型,它是定义为特征本身的一部分的泛型类型:
pub trait SeedableRng<Seed>: Rng {
// ^^^^
fn reseed(&mut self, _: Seed);
fn from_seed(seed: Seed) -> Self;
}
Run Code Online (Sandbox Code Playgroud)
Isaac64Rng使用切片u64:
impl<'a> SeedableRng<&'a [u64]> for Isaac64Rng
// ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
XorShiftRng正好使用 4 u32:
impl SeedableRng<[u32; 4]> for XorShiftRng
// ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
你可以在 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
Run Code Online (Sandbox Code Playgroud)
其他 crate 也可以定义具有不同种子类型的随机数生成器。