我可以看到我必须像这样导入:
use std::io::IoResult;
use std::num::{Int, ToPrimitive};
use std::rand::{OsRng, Rng};
然后创建一个新的OsRng实例,并尝试从中生成一个新的u32 int
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
的作用域中的任何方法
但是铁锈文件清楚地说有一个功能 next_u32
? http://doc.rust-lang.org/std/rand/struct.OsRng.html
我错过了什么?
2 回答
这里你的问题是
OsRng::new()
不返回OsRng
实例,而是IoResult<OsRng>
. 因为程序无法获取OS随机数生成器 .示例用法是:
在Rust上搜索生成安全随机数返回了这个SO问题,但作为对当前答案状态的评论,Rust不再包括标准库中的随机数生成 . 这是一个更新的例子(截至2017年1月):
Cargo.toml
main.rs
有用的参考:https://doc.rust-lang.org/rand/rand/index.html#cryptographic-security
否则,使用原始答案中的代码会出现此错误: