Rust rng.gen()何时为非真?

Rust rng.gen()何时为非真?,rust,Rust,我正在使用中的数字生成器作为通用随机数生成器的模板。问题是,有时函数会无声地失败,所以我添加了一个fail子句,它只打印“nottrue!” 使用std::rand; 使用std::rand::Rng; fn main(){ 让mut rng=rand::task_rng(); 如果rng.gen(){//bool println!(“f64:{}”,rng.gen::()); }否则{ println!(“不是真的!”); } } 有时运行可执行文件会打印一个随机数,有时会打印“Not tr

我正在使用中的数字生成器作为通用随机数生成器的模板。问题是,有时函数会无声地失败,所以我添加了一个fail子句,它只打印“nottrue!”

使用std::rand;
使用std::rand::Rng;
fn main(){
让mut rng=rand::task_rng();
如果rng.gen(){//bool
println!(“f64:{}”,rng.gen::());
}否则{
println!(“不是真的!”);
}
}
有时运行可执行文件会打印一个随机数,有时会打印“Not true!”。什么可能导致rng.gen()的计算结果为false

编辑:语法

来自方法:

//返回Rand类型的随机值。
fn gen(&mut self)->T
T
类型为
bool
时,它将随机生成
true
false
。如果它总是生成一个
true
值,那么它就不是有用的随机值

一般来说,
if rng.gen(){…}else{…}
是一个有用的习惯用法,可以说,“随机选择两个代码路径中的一个。”

方法:

//返回Rand类型的随机值。
fn gen(&mut self)->T
T
类型为
bool
时,它将随机生成
true
false
。如果它总是生成一个
true
值,那么它就不是有用的随机值


通常,
if rng.gen(){…}else{…}
是一个有用的习惯用法,可以说,“随机选择两个代码路径中的一个。”

让我们看看签名

然后呢?“一种可以使用Rng随机生成的类型。”,其中包括其实现者
bool

简单地说,
gen()
可以根据可以推断的类型,返回实现
Rand
的任何类型的值。你可以得到一个随机数,一个随机字符,甚至一个随机布尔

if
子句必须为bool类型。因此,类型推断器确定该特定
gen()
调用的
T
bool
。您还可以编写
rng.gen::()
来达到相同的效果


因此,将评估if/else结构的哪个分支是随机的。

让我们看看签名

然后呢?“一种可以使用Rng随机生成的类型。”,其中包括其实现者
bool

简单地说,
gen()
可以根据可以推断的类型,返回实现
Rand
的任何类型的值。你可以得到一个随机数,一个随机字符,甚至一个随机布尔

if
子句必须为bool类型。因此,类型推断器确定该特定
gen()
调用的
T
bool
。您还可以编写
rng.gen::()
来达到相同的效果


因此,您的if/else结构的哪个分支将被评估是随机的。

如果有人提交一个pull请求,将
bool
注释替换为例如
random bool
,或者以其他方式使这个示例更清晰,那将是一个很酷的选择:。很棒的呼叫。公关部表示,如果有人提交拉取请求,将
bool
注释替换为例如
random bool
,或者以其他方式使此示例更清晰,那就太酷了:。很棒的呼叫。PR生成了一个随机生成器,它返回布尔值,在真实路径中,是一个随机数生成器。这是一个初始类型的第一个例子。ThanksOh,所以有一个随机生成器,它返回布尔值,在这个真实路径中,有一个随机数生成器。这是一个初始类型的第一个例子。谢谢
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!");
    }
}
// Return a random value of a Rand type.
fn gen<T: Rand>(&mut self) -> T