Szukaj…


Wprowadzenie

Rust ma wbudowaną możliwość generowania liczb losowych przez skrzynkę rand . Niegdyś część standardowej biblioteki Rust, funkcjonalność skrzynki rand została oddzielona, aby umożliwić jej rozwój ustabilizować się osobno w stosunku do reszty projektu Rust. W tym temacie opisano, jak po prostu dodać skrzynkę rand, a następnie wygenerować i wyprowadzić losową liczbę w Rust.

Uwagi

Istnieje wbudowana obsługa RNG powiązanego z każdym wątkiem przechowywanym w lokalnej pamięci wątków. Do tego RNG można uzyskać dostęp za pośrednictwem thread_rng lub użyć niejawnie za pomocą random . Ten RNG jest zwykle losowo inicjowany ze źródła losowości systemu operacyjnego, np. /dev/urandom w systemach Unix, i automatycznie zresetuje się z tego źródła po wygenerowaniu 32 KiB losowych danych.

Aplikacja wymagająca źródła entropii do celów kryptograficznych musi używać OsRng , który odczytuje losowość ze źródła udostępnianego przez system operacyjny (np. /dev/urandom w Unixes lub CryptGenRandom() w Windows). Inne generatory liczb losowych dostarczone przez ten moduł nie są odpowiednie do takich celów.

Generowanie dwóch liczb losowych za pomocą Rand

Po pierwsze, musisz dodać skrzynię do pliku Cargo.toml jako zależność.

[dependencies]
rand = "0.3"

Spowoduje to odzyskanie skrzynki rand z crates.io . Następnie dodaj to do korzenia skrzynki.

extern crate rand;

Ponieważ ten przykład zapewni proste wyjście przez terminal, stworzymy główną funkcję i wydrukujemy dwie losowo generowane liczby na konsoli. W tym przykładzie buforowany będzie lokalny generator liczb losowych. Generowanie wielu wartości może często okazać się bardziej wydajne.

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>())
    }
}

Po uruchomieniu tego przykładu w konsoli powinna pojawić się następująca odpowiedź.

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

Generowanie postaci za pomocą Rand

Do generowania znaków można wykorzystać funkcję generatora liczb losowych lokalnie wątkowych, random .

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

W przypadku okazjonalnych lub pojedynczych wniosków, takich jak powyższe, jest to rozsądnie skuteczna metoda. Jeśli jednak zamierzasz wygenerować więcej niż garść liczb, przekonasz się, że buforowanie generatora będzie bardziej wydajne.

W tym przypadku należy spodziewać się następujących danych wyjściowych.

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow