Comment puis-je générer un nombre aléatoire dans une plage de Rouille?
Lors de la recherche pour savoir comment générer un nombre aléatoire à l'aide de la Rouille, je suis venu à travers l'exemple suivant. Cependant, il ne semble pas fonctionner... l'exemple ne semble pas montrer de quelle version de la Rouille il s'applique, il est peut-être out-of-date de, ou peut-être que j'ai obtenu quelque chose de mal.
// http://static.rust-lang.org/doc/master/std/rand/trait.Rng.html
01 use std::rand;
02 use std::rand::Rng;
03
04 fn main() {
05 let mut rng = rand::task_rng();
06 let n: uint = rng.gen_range(0u, 10);
07 println!("{}", n);
08 let m: float = rng.gen_range(-40.0, 1.3e5);
09 println!("{}", m);
10 }
Lorsque je tente de compiler les résultats suivants :
test_rand002.rs:6:17: 6:39 error: type `@mut std::rand::IsaacRng` does not
implement any method in scope named `gen_range`
test_rand002.rs:6 let n: uint = rng.gen_range(0u, 10);
^~~~~~~~~~~~~~~~~~~~~~
test_rand002.rs:8:18: 8:46 error: type `@mut std::rand::IsaacRng` does not
implement any method in scope named `gen_range`
test_rand002.rs:8 let m: float = rng.gen_range(-40.0, 1.3e5);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to 2 previous errors
Il y a un autre exemple (comme suit) sur la même page (ci-dessus) qui ne fonctionne pas. Cependant, il ne fait pas exactement ce que je veux, bien que je puisse l'adapter.
autre exemple (qui fonctionne) :
use std::rand;
use std::rand::Rng;
fn main() {
let mut rng = rand::task_rng();
let x: uint = rng.gen();
println!("{}", x);
println!("{:?}", rng.gen::<(f64, bool)>());
}
Comment puis-je générer un "simple" nombre aléatoire à l'aide de la Rouille (par exemple: i64) à l'intérieur d'une plage donnée (par exemple: de 0 à n) ?
Une note rapide qu'aucune des réponses ci-dessous semblent travailler pour la Rouille 1.7.
OriginalL'auteur Brian Oh | 2013-10-30
Vous devez vous connecter pour publier un commentaire.
Cela a beaucoup changé récemment (désolé! on a tous été moi), et 0,8, il a été appelé
gen_integer_range
(note de l'/0.8/
plutôt que/master/
dans l'URL, si vous utilisez de 0,8 vous besoin à la lecture de ces documents).Un mot d'avertissement:
.gen_integer_range
était tout à fait tort à de nombreux égards, la nouvelle.gen_range
n'a pas l'inexactitude des problèmes.Code maître (où
.gen_range
fonctionne très bien):Je vois que pour 0,10 et maîtriser la documentation dit à
use rand::Rng
static.rust-lang.org/doc/0.10/rand/index.html c'est donc une documentation bug probablementJe ne pense pas qu'il y a un point-virgule manquant? Et que faites-vous de la pensée est un doc bug? (Merci de noter ma pauvre arithmétique.)
Je reçois
rust.rs:1:17: 1:25 error: unresolved import
std::rand::task_rng. There is no
task_rng " dansstd::rand
la rouille.rs:1 utiliser std::rand::{task_rng, Rng}; ^~~~~~~~ erreur: abandon en raison de précédentes message d'erreur lorsque j'essaie de le compiler avecrustc 1.0.0-nightly (b4c965ee8 2015-03-02) (built 2015-03-03)
Pour les gens qui trébuchent sur cette question maintenant:
rand
semble être devenu indépendant caisse sur son propre, et la réponse par Manoel Stilpen ci-dessous, où vous utilisez explicitement que la caisse, les œuvres.OriginalL'auteur huon
Travaillé pour moi de cette façon:
Il génère un nombre aléatoire entre 0 et 100.
N'oubliez pas d'ajouter rand dépendances à la cargaison.toml
Edit: le nombre aléatoire est généré à l'intérieur de l'intervalle [0,99]
vous devez installer le rand caisse. Et comme je l'ai dit de l'ajouter à la cargaison.toml
OriginalL'auteur Manoel Stilpen
Maintenant la rouille est stable un nombre aléatoire peut être généré comme ceci:
(Fonctionne avec cage: rand=0,3 et rand=0.4)
Live exemple et
lien vers Docs
rand::thread_rng
. play.rust-lang.org/...Je pense que quelque chose a changé depuis chaque réponse et même la documentation
rand::thread_rng
. Par la voie,rand
est instable maintenant, vous devez ajouter#![feature(rand)]
vers le haut de votre fichier et utiliser la nuit rustc. Tout ce que je veux faire est de tester quelque chose, je suis ce proximité tout simplement à l'aide de la Crand()
travers la fonction de FFI et l'appeler un jour.Cela fonctionne pour moi avec de la Rouille 1.7.0. Devez ajouter
rand = "0.3"
enCargo.toml
fichier.OriginalL'auteur andy boot