Sök…


Introduktion

Rost har en inbyggd förmåga att tillhandahålla slumpvis talgenerering genom randlådan . När en del av Rust standardbibliotek, var funktionaliteten hos rand lådan separeras för att möjliggöra dess utveckling för att stabilisera separat till resten av Rust projektet. Detta ämne kommer att täcka hur man helt enkelt lägger till randlådan, sedan genererar och producerar ett slumpmässigt antal i Rust.

Anmärkningar

Det finns ett inbyggt stöd för en RNG associerad med varje tråd lagrad i tråd-lokal lagring. Denna RNG kan nås via thread_rng eller användas implicit via random . Denna RNG fröjas normalt slumpmässigt från en operativsystemskälla för slumpmässighet, t.ex. /dev/urandom på Unix-system, och kommer automatiskt att resesera sig själv från denna källa efter att ha genererat 32 KiB slumpmässiga data.

En applikation som kräver en entropikälla för kryptografiska ändamål måste använda OsRng , som läser slumpmässighet från källan som operativsystemet tillhandahåller (t.ex. /dev/urandom på Unixes eller CryptGenRandom() på Windows). De andra slumptalgeneratorerna som tillhandahålls av denna modul är inte lämpliga för sådana ändamål.

Generera två slumpmässiga nummer med Rand

Först måste du lägga till lådan i din Cargo.toml-fil som ett beroende.

[dependencies]
rand = "0.3"

Detta kommer att hämta rand lådan från crates.io . Lägg sedan till detta i din låda rot.

extern crate rand;

Eftersom detta exempel kommer att ge en enkel utgång via terminalen, skapar vi en huvudfunktion och skriver ut två slumpmässigt genererade nummer till konsolen. Trådens lokala slumpmässig generator genereras i detta exempel. När man genererar flera värden kan det ofta visa sig vara mer effektivt.

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

När du kör detta exempel bör du se följande svar i konsolen.

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

Generera tecken med Rand

För att generera tecken kan du använda den tråd-lokala slumpnummergeneratorfunktionen, random .

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

För tillfälliga eller singulariska förfrågningar, som ovanstående, är detta en rimlig effektiv metod. Men om du tänker generera mer än en handfull nummer, kommer du att hitta cachning av generatorn som blir mer effektiv.

Du kan förvänta dig att se följande utdata i detta fall.

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow