我有一个测试程序,我需要生成一个随机数。因此我做了一个比较使用
的测试"uVal = rand::task_rng().gen();"
每次生成随机数与使用例如创建对象相比。 :
let mut oRandom = std::rand::task_rng()
并生成多个随机数。使用创建的对象(oRandom)要快得多,所以我认为我应该将对象传递给生成随机数的函数,但是我还没有找到办法做到这一点。这并不重要,但我认为可以做到。
示例1:不使用对象:(慢于2)
let mut uVal : u8;
for _ in range(1, iMax) {
uVal = std::rand::task_rng().gen();
示例2:使用对象:(比1快得多)
let mut oRandom = std::rand::task_rng();
let mut uVal : u8;
for _ in range(1, iMax) {
uVal = oRandom.gen();
示例3:我尝试将对象传递给函数:
12 let mut oRandom = std::rand::task_rng();
13 fTest03(iMax, &mut oRandom);
53 fn fTest03(iMax : i64, oRandom : &mut std::rand::task_rng) {
This results in the following error :
test_rand003.rs:53:38: 53:57 error: use of undeclared type name
`std::rand::task_rng`
test_rand003.rs:53 fn fTest03(iMax : i64, oRandom : &mut std::rand::task_rng) {
如何将上面第13行中的变量“oRandom”传递给函数?
答案 0 :(得分:1)
有两种方法,一种可以使用泛型方法,因此如果您决定停止使用任务本地方法,它可以与其他RNG一起使用:
fn fTest03<R: Rng>(iMax: i64, oRandom: &mut R) { ... }
或者,您可以直接使用task_rng
的返回类型:
fn fTest03(iMax: i64, oRandom: @mut IsaacRng) { ... }
(您可能需要导入Rng
/ IsaacRng
,或者对其进行全面限定,例如std::rand::Rng
。)
任何一个都应该使用fTest03(10, std::rand::task_rng())
。
答案 1 :(得分:0)
task_rng()不是类型,它是一个返回任务本地随机数生成器(TaskRng)的函数。
task_rng函数的签名是:
pub fn task_rng() -> @mut TaskRng
因此,如果您将第53行更改为:
fn fTest03(iMax : i64, oRandom : &mut std::rand::Rng) {...
事情应该很好。