SeedableRng
有an example,但没有关于种子是什么的解释。 Searching for the Seed
type未提供详细信息。在GitHub源目录中搜索也没有为我清除这一点。
let seed: &[_] = &[1, 2, 3, 4];
let mut rng: StdRng = SeedableRng::from_seed(seed);
seed
必须是四元素的整数数组吗?为什么?它可以是其他什么吗?
答案 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
其他板条箱也可以定义具有不同种子类型的随机数生成器。