【问题标题】:How do I create a random String by sampling from alphanumeric characters?如何通过从字母数字字符中采样来创建随机字符串?
【发布时间】:2019-06-13 23:40:49
【问题描述】:

我尝试编译以下代码:

extern crate rand; // 0.6
use rand::Rng;

fn main() {
    rand::thread_rng()
        .gen_ascii_chars()
        .take(10)
        .collect::<String>();
}

但是cargo build 说:

warning: unused import: `rand::Rng`
 --> src/main.rs:2:5
  |
2 | use rand::Rng;
  |     ^^^^^^^^^
  |
  = note: #[warn(unused_imports)] on by default

error[E0599]: no method named `gen_ascii_chars` found for type `rand::prelude::ThreadRng` in the current scope
 --> src/main.rs:6:10
  |
6 |         .gen_ascii_chars()
  |          ^^^^^^^^^^^^^^^

Rust 编译器要求我删除 use rand::Rng; 子句,同时抱怨没有 gen_ascii_chars 方法。 我希望 Rust 只使用 rand::Rng 特征,并且不提供如此矛盾的错误消息。我怎样才能从这里走得更远?

【问题讨论】:

    标签: random rust alphanumeric


    【解决方案1】:

    正如rand 0.5.0 docs 中所述,gen_ascii_chars 已被弃用,您应该改用sample_iter(&amp;Alphanumeric)

    use rand::{distributions::Alphanumeric, Rng}; // 0.8
    
    fn main() {
        let s: String = rand::thread_rng()
            .sample_iter(&Alphanumeric)
            .take(7)
            .map(char::from)
            .collect();
        println!("{}", s);
    }
    

    【讨论】:

    • Alphanumeric 不等于 asciiascii包括@​​987654328@等
    【解决方案2】:

    您可以将random-string crate 与您的字符集一起使用。您可以通过在您的Cargo.toml 中包含random-string 库来安装它 看一下示例:

    // Your custom charset
    let charset: &str = "abcdefghijklmnopqrstuvwxyz";
    
    // Syntax:
    // random_string::generate(length, your_charset);
    
    // Usage:
    println!("{}", random_string::generate(6, charset));
    

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 2012-05-30
      • 2021-04-05
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多