Zoeken…


Invoering

Rust heeft een ingebouwd vermogen om willekeurige getallen door de randkrat te genereren. Ooit onderdeel van de Rust-standaardbibliotheek, werd de functionaliteit van het randkrat gescheiden zodat de ontwikkeling ervan zich kon stabiliseren los van de rest van het Rust-project. In dit onderwerp wordt uitgelegd hoe je eenvoudig de randkrat toevoegt en vervolgens een willekeurig getal in Rust genereert en uitvoert.

Opmerkingen

Er is ingebouwde ondersteuning voor een RNG die is gekoppeld aan elke thread die is opgeslagen in thread-lokale opslag. Deze RNG is toegankelijk via thread_rng of impliciet via random . Deze RNG wordt normaal willekeurig uit een bron van het besturingssysteem van het besturingssysteem, bijv. /dev/urandom op Unix-systemen, gezaaid en zal zichzelf automatisch uit deze bron herladen na het genereren van 32 KiB willekeurige gegevens.

Een toepassing die een entropiebron vereist voor cryptografische doeleinden, moet OsRng , die willekeurigheid leest van de bron die het besturingssysteem biedt (bijvoorbeeld /dev/urandom op Unixes of CryptGenRandom() op Windows). De andere willekeurige nummergenerators van deze module zijn niet geschikt voor dergelijke doeleinden.

Twee willekeurige getallen genereren met Rand

Allereerst moet u de krat toevoegen aan uw Cargo.toml-bestand als een afhankelijkheid.

[dependencies]
rand = "0.3"

Dit zal het halen rand krat van crates.io . Voeg dit vervolgens toe aan je kratwortel.

extern crate rand;

Omdat dit voorbeeld een eenvoudige uitvoer via de terminal gaat bieden, maken we een hoofdfunctie en drukken we twee willekeurig gegenereerde nummers af naar de console. De thread lokale willekeurige nummergenerator wordt in dit voorbeeld in de cache geplaatst. Bij het genereren van meerdere waarden kan dit vaak efficiënter zijn.

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

Wanneer u dit voorbeeld uitvoert, zou u het volgende antwoord in de console moeten zien.

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

Tekens genereren met Rand

Om tekens te genereren, kunt u de thread-local random number generator-functie random .

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

Voor incidentele of enkelvoudige verzoeken, zoals hierboven, is dit een redelijk efficiënte methode. Als u echter van plan bent meer dan een handvol getallen te genereren, zult u merken dat het cachen van de generator efficiënter zal zijn.

Je zou in dit geval de volgende uitvoer verwachten.

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow