Recherche…


Introduction

Rust a une capacité intégrée pour fournir une génération de nombres aléatoires à travers la caisse de rand . Une fois partie de la bibliothèque standard Rust, la fonctionnalité du rand crate a été séparée pour permettre à son développement de se stabiliser séparément du reste du projet Rust. Ce sujet couvrira comment ajouter simplement le rand crate, puis générer et sortir un nombre aléatoire dans Rust.

Remarques

Il existe un support intégré pour un RNG associé à chaque thread stocké dans un stockage local. Ce RNG est accessible via thread_rng , ou implicitement via le random . Ce RNG est normalement extrait au hasard d'une source aléatoire du système d'exploitation, par exemple /dev/urandom sur les systèmes Unix, et se redimensionnera automatiquement à partir de cette source après avoir généré 32 KiB de données aléatoires.

Une application nécessitant une source d'entropie à des fins de cryptographie doit utiliser OsRng , qui lit le caractère aléatoire de la source fournie par le système d'exploitation (par exemple, /dev/urandom sur Unix ou CryptGenRandom() sous Windows). Les autres générateurs de nombres aléatoires fournis par ce module ne sont pas adaptés à de telles fins.

Générer deux nombres aléatoires avec Rand

Tout d'abord, vous devrez ajouter la caisse dans votre fichier Cargo.toml en tant que dépendance.

[dependencies]
rand = "0.3"

Cela permettra de récupérer le rand crate.io . Ensuite, ajoutez ceci à votre racine de caisse.

extern crate rand;

Comme cet exemple va fournir une sortie simple via le terminal, nous allons créer une fonction principale et imprimer deux nombres générés aléatoirement dans la console. Le générateur de nombres aléatoires local de thread sera mis en cache dans cet exemple. Lorsque vous générez plusieurs valeurs, cela peut souvent s'avérer plus efficace.

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

Lorsque vous exécutez cet exemple, vous devriez voir la réponse suivante dans la console.

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

Générer des caractères avec Rand

Pour générer des caractères, vous pouvez utiliser la fonction de générateur de nombres aléatoires local au fil, random .

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

Pour les demandes ponctuelles ou singulières, comme celle ci-dessus, il s'agit d'une méthode efficace et raisonnable. Cependant, si vous avez l'intention de générer plus d'une poignée de chiffres, vous constaterez que la mise en cache du générateur sera plus efficace.

Vous devriez vous attendre à voir la sortie suivante dans ce cas.

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow