M. *_*aut 3 random alphanumeric rust
我试图编译以下代码:
extern crate rand; // 0.6
use rand::Rng;
fn main() {
rand::thread_rng()
.gen_ascii_chars()
.take(10)
.collect::<String>();
}
Run Code Online (Sandbox Code Playgroud)
但cargo build说:
extern crate rand; // 0.6
use rand::Rng;
fn main() {
rand::thread_rng()
.gen_ascii_chars()
.take(10)
.collect::<String>();
}
Run Code Online (Sandbox Code Playgroud)
Rust编译器要求我删除该use rand::Rng;子句,同时抱怨没有gen_ascii_chars方法。我希望Rust只使用rand::Rng特征,而不会提供这种矛盾的错误消息。我如何才能从这里走得更远?
小智 29
随着rand 0.8.4的引入,rand现在 containsDistString包含一种更有效的随机字母数字字符串采样方法。rand 文档中的示例:
use rand::distributions::{Alphanumeric, DistString};
let string = Alphanumeric.sample_string(&mut rand::thread_rng(), 16);
println!("{}", string);
Run Code Online (Sandbox Code Playgroud)
如rand 0.5.0 gen_ascii_chars中所述,不推荐使用docs。
从0.6.0开始,代码应为:
extern crate rand;
use rand::Rng;
use rand::distributions::Alphanumeric;
fn main() {
rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(10)
.collect::<String>();
}
Run Code Online (Sandbox Code Playgroud)
具有自定义字符集和板条箱的示例rand:
use rand::Rng;
use std::iter;
fn generate(len: usize) -> String {
const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
let mut rng = rand::thread_rng();
let one_char = || CHARSET[rng.gen_range(0..CHARSET.len())] as char;
iter::repeat_with(one_char).take(len).collect()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |