入门指引
例子
让我们从这个例子出发吧(playground 链接):
首先,你会注意到我们从 prelude 引入所有需要的东西。
这是以一种偷懒的方式来 use
Rand ,就像标准库的 prelude 一样,
只引入最常用的条目 (items) 。
如果你不希望引入 prelude ,那么请一定记得引入最重要的 Rng
trait !
通过使用 thread_rng
函数或者 random
函数,
Rand 库会根据需要自动初始化一个基于本地线程的 (thread-local)
安全的 随机数生成器 (generator 或 random number generator 或 RNG) 。
random
函数只能以 Standard
这样依赖于类型方式来对值进行抽样,
而 thread_rng
能让你操控生成器。
所有的生成器都实现了 Rng
trait ,
这个 trait 提供了上面用到的 gen
、 gen_range
和 sample
方法。
Rand 通过 IteratorRandom
和 SliceRandom
两个 trait
分别对迭代器和切片提供了随机数相关的功能。
设置生成器种子
指定种子需要指定 RNG ,然后使用 seed_from_u64
或 from_seed
方法。
注意 seed_from_u64
不适合 加密领域,
因为单个 u64
无法提供足够的信息熵 (entropy) 来安全设置 RNG 种子。
我们在下面使用 ChaCha8Rng
,是因为它很快,而且具有良好的移植性。
到 支持的 RNGs 页面进行详细阅读。
但是如果你很关心重现结果的话,就避免使用 SmallRng
和 StdRng
。