我可以看到我需要像这样导入:
use std::io::IoResult;
use std::num::{Int, ToPrimitive};
use std::rand::{OsRng, Rng};
然后创建一个OsRng实例,并尝试从中生成一个新的u32整数。
fn main() {
let mut rng = OsRng::new();
let num:u32 = rng.next_u32();
println!("{}",num);
}
然而我得到了错误类型
core::result::Result<std::rand::os::imp::OsRng,std::io::IoError>
,它没有在作用域内实现任何名为next_u32
的方法。但是Rust文档明确表示有一个函数next_u32
?http://doc.rust-lang.org/std/rand/struct.OsRng.html 我错过了什么?
try!()
,你需要调用OsRng::new()
函数返回一个IoResult<_>
(它会在错误时提前返回)。实际上,这是一个非常简单的宏:http://doc.rust-lang.org/std/macro.try!.html - LevansOsRng::new()
是否返回IoResult
,而在于调用它的函数。因为try!
展开为return Err(..)
,所以您的函数必须与之兼容。 - Levansrand
crate 中的use rand::{OsRng, Rng}
。 - Ben Ruijl