我使用std:rand中的数字生成器作为通用随机数生成器的模板。问题有时候,函数无声地失败,所以我添加了一个只打印“Not true!”的失败子句。
use std::rand;
use std::rand::Rng;
fn main() {
let mut rng = rand::task_rng();
if rng.gen() { // bool
println!("f64: {}", rng.gen::<f64>());
} else {
println!("Not true!");
}
}
有时运行可执行文件会打印一个随机数,有时会打印“Not true!”。什么可能导致rng.gen()评估为false?
编辑:语法
答案 0 :(得分:2)
来自documentation of the Rng::gen方法:
// Return a random value of a Rand type.
fn gen<T: Rand>(&mut self) -> T
当T
类型为bool
时,它会随机生成true
或false
。如果它始终生成true
值,那么它就不会有用。
通常,if rng.gen() { ... } else { ... }
是一个有用的习惯用语,&#34;随机选择两个代码路径中的一个。&#34;
答案 1 :(得分:2)
让我们来看一下签名。
fn gen<T: Rand>(&mut self) -> T
Rand
? “可以使用Rng随机生成的类型。”,包括其实现者bool
。
简单来说,gen()
可以根据它可以推断的类型返回实现Rand
的任何类型的值。你可以得到一个随机数,一个随机字符,甚至是一个随机的字符。
if
子句必须是bool类型。因此,类型推断器确定该特定T
调用的gen()
为bool
。您也可以将rng.gen::<bool>()
写成同样的效果。
因此,将评估if / else结构的哪个分支是随机的。