Rust
Willekeurige nummergeneratie
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}')