Suche…


Einführung

Rust verfügt über eine integrierte Funktion zur Erzeugung von Zufallszahlen über die Randkiste . Als Teil der Rust-Standardbibliothek wurde die Funktionalität der rand- Kiste getrennt, damit sich ihre Entwicklung unabhängig vom restlichen Rust-Projekt stabilisieren konnte. In diesem Thema wird beschrieben, wie Sie die Randkiste hinzufügen und anschließend eine Zufallszahl in Rust generieren und ausgeben.

Bemerkungen

Es gibt eine integrierte Unterstützung für ein RNG, das jedem Thread zugeordnet ist, der im lokalen Threadspeicher gespeichert ist. Auf diesen RNG kann über thread_rng zugegriffen werden oder implizit über random . Diese RNG wird normalerweise zufällig aus einer Zufallsquelle des Betriebssystems ausgesät, z. B. /dev/urandom auf Unix-Systemen, und wird automatisch aus dieser Quelle nach dem Erzeugen von 32 KiB zufälliger Daten neu angespielt.

Eine Anwendung, die eine Entropiequelle für kryptografische Zwecke benötigt, muss OsRng , das OsRng aus der vom Betriebssystem OsRng Quelle liest (z. B. /dev/urandom unter Unixes oder CryptGenRandom() unter Windows). Die anderen von diesem Modul bereitgestellten Zufallszahlengeneratoren sind für solche Zwecke nicht geeignet.

Zwei Zufallszahlen mit Rand erzeugen

Zunächst müssen Sie die Kiste als Abhängigkeit in Ihre Cargo.toml-Datei einfügen.

[dependencies]
rand = "0.3"

Dadurch wird die rand Kiste von crates.io abgerufen. Als nächstes fügen Sie dies Ihrer Kistenwurzel hinzu.

extern crate rand;

Da dieses Beispiel eine einfache Ausgabe über das Terminal liefert, erstellen wir eine Hauptfunktion und drucken zwei zufällig generierte Zahlen auf die Konsole. Der Thread-Generator für lokale Zufallszahlen wird in diesem Beispiel zwischengespeichert. Bei der Generierung mehrerer Werte kann sich dies oft als effizienter erweisen.

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

Wenn Sie dieses Beispiel ausführen, sollte die folgende Antwort in der Konsole angezeigt werden.

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

Zeichen mit Rand erzeugen

So generieren Zeichen, können Sie die lokalen Thread-Zufallszahlengenerator - Funktion nutzen random .

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

Für gelegentliche oder einzelne Anfragen wie die oben genannte ist dies eine vernünftige, effiziente Methode. Wenn Sie jedoch mehr als eine Handvoll Zahlen generieren möchten, werden Sie feststellen, dass das Generieren des Caching effizienter ist.

In diesem Fall sollten Sie mit der folgenden Ausgabe rechnen.

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow