处理 Error
Rand 库里面的错误处理折中考虑了简便性和必要性。 大多数 RNGs 和抽样函数不会产生 erros 。 如果处理错误,则可能导致不容忽视的开销,至少会导致代码更复杂、使用更不人性化, 以及可能对性能造成影响。 但是,内部的 RNGs 还是有可能运行失败,所以处理这种情况的错误是很重要的。
Rand 里大多数方法不应该返回 Result
类型,但以下是一些重要的例外:
大多数消耗随机值的函数也不会做任何错误处理,
而且在底层调用 RngCore
trait 的 “永不运行失败” 的方法。
因为大部分 RNGs 不会运行失败,所以这种机制不会带来太大问题,
但是少数一些生成器却可能运行失败:
OsRng
对接操作系统的生成器的接口;在极少数的情况下,它会因为没准备好或者不可用而 fail 。JitterRng
基于计时器扰动 (timer jitter) 的生成器;如果计时器缺乏精度或者太容易预测,它会 fail 。EntropyRng
是对上面两个的抽象,所以它们 fail 的时候,这个最终会 fail。(译者注,这个已经 deprecated 了)thread_rng
通过EntropyRng
来设置种子,当每个线程第一次使用的时候可能会 fail, 第一次使用之后绝不会 fail 。ReadRng
尝试从来源中读取数据,当流结束或报错时,它会 fail 。 (译者注,这个也 deprecated 了)