Поиск…


Вступление

Rust имеет встроенную возможность обеспечения генерации случайных чисел через ящик rand . Будучи частью стандартной библиотеки Rust, функциональность ящика rand была разделена, чтобы ее развитие стабилизировалось отдельно от остальной части проекта Rust. В этом разделе рассказывается, как просто добавить ящик rand, затем генерировать и выводить случайное число в Rust.

замечания

Существует встроенная поддержка RNG, связанная с каждым потоком, хранящимся в локальном хранилище потоков. К этому RNG можно получить доступ через thread_rng или использовать неявно через random . Этот RNG обычно случайным образом высеивается из источника случайной системы операционной системы, например /dev/urandom в Unix-системах, и автоматически генерируется из этого источника после генерации 32 KiB случайных данных.

Приложение, для которого требуется источник энтропии для криптографических целей, должно использовать OsRng , который считывает случайность из источника, который предоставляет операционная система (например, /dev/urandom в Unixes или CryptGenRandom() в Windows). Другие генераторы случайных чисел, предоставленные этим модулем, не подходят для таких целей.

Создание двух случайных чисел с Rand

Во-первых, вам нужно добавить ящик в файл Cargo.toml в качестве зависимости.

[dependencies]
rand = "0.3"

Это доставит ящик rand из ящиков.io . Затем добавьте это в свой корневой каталог.

extern crate rand;

Поскольку этот пример будет обеспечивать простой вывод через терминал, мы создадим основную функцию и напечатаем два случайно генерируемых номера на консоли. В этом примере будет создан кешированный локальный генератор случайных чисел. При создании нескольких значений это часто оказывается более эффективным.

use rand::Rng;

fn main() {
    
    let mut rng = rand::thread_rng();
    
    if rng.gen() { // random bool
        println!("i32: {}, u32: {}", rng.gen::<i32>(), rng.gen::<u32>())
    }
}

Когда вы запускаете этот пример, вы должны увидеть следующий ответ в консоли.

$ cargo run
     Running `target/debug/so`
i32: 1568599182, u32: 2222135793

Создание персонажей с Rand

Чтобы генерировать символы, вы можете использовать функцию генератора случайных чисел в потоке, random .

fn main() {
    let tuple = rand::random::<(f64, char)>();
    println!("{:?}", tuple)
}

Для случайных или сингулярных запросов, например выше, это разумный эффективный метод. Однако, если вы собираетесь генерировать больше, чем несколько чисел, вы обнаружите, что кеширование генератора будет более эффективным.

В этом случае вы должны ожидать увидеть следующий результат.

$ cargo run
     Running `target/debug/so`
(0.906881, '\u{9edc}')


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow