Wie kann ich eine Zufallszahl erzeugen in einem Bereich in Rust?
Anmerkung der Redaktion: Dieses code-Beispiel ist aus einer version von Rust vor 1.0 und nicht syntaktisch gültig Rust 1.0-code. Aktualisierte Versionen dieses Codes erzeugen andere Fehler, aber die Antworten, die immer noch wertvolle Informationen.
Stieß ich auf das folgende Beispiel zum erzeugen einer Zufallszahl mit Rost, aber es scheint nicht zu funktionieren. Das Beispiel zeigt nicht an, welche version von Rust, die es gilt zu ist, ist es vielleicht out-of-date, oder vielleicht habe ich etwas falsch.
//http://static.rust-lang.org/doc/master/std/rand/trait.Rng.html
use std::rand;
use std::rand::Rng;
fn main() {
let mut rng = rand::task_rng();
let n: uint = rng.gen_range(0u, 10);
println!("{}", n);
let m: float = rng.gen_range(-40.0, 1.3e5);
println!("{}", m);
}
Wenn ich versuche zu kompilieren folgende Fehlermeldung angezeigt:
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);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Es ist ein weiteres Beispiel (wie folgt) auf der gleichen Seite (oben), das funktioniert. Jedoch, es nicht zu tun genau das, was ich möchte, obwohl ich könnte es anpassen.
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)>());
}
Wie kann ich das erzeugen einer "einfachen" random-Nummer mit Rost (z.B.: i64
) innerhalb eines bestimmten Bereichs (z.B.: 0 bis n)?
- Links zu static.rust-lang.org/doc/master bedeuten Sie die version master.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser hat sich sehr geändert in letzter Zeit (sorry! es ist alles von mir), und in Rust 0.8 hieß es
gen_integer_range
(Hinweis: die/0.8/
eher als/master/
in der URL, wenn Sie mit 0.8 müssen zu Lesen, den docs).Ein Wort der Warnung:
.gen_integer_range
war völlig falsch, in vielerlei Hinsicht, die neue.gen_range
haben nicht die Unrichtigkeit Probleme.Code für master (wo
.gen_range
gut funktioniert):use rand::Rng
static.rust-lang.org/doc/0.10/rand/index.html es ist also eine Dokumentation, bug wohl;
aber gefundenfn
. Auch in der doc sagt es zu schreiben:use rand::Rng
aber rustc nicht finden können, eine solche Kiste.std::rand
war bewegt zu seiner eigenen Kisterand
relativ vor kurzem. (Ich Mach alle die Dinge, die Sie bemerkt, danke.)rust.rs:1:17: 1:25 error: unresolved import
std::rand::task_rng. There is no
task_rng` instd::rand
Rost.rs:1 verwenden std::rand::{task_rng, Rng}; ^~~~~~~~ Fehler: Abbruch aufgrund vorheriger Fehler`, wenn ich versuche zu kompilieren mitrustc 1.0.0-nightly (b4c965ee8 2015-03-02) (built 2015-03-03)
rand
zu haben scheint, unabhängig Kiste auf seine eigene, und die Antwort von Manoel Stilpen unten, wo Sie explizit, dass die Kiste funktioniert.std::rand
error[E0432]: unresolved import
std::rand`Dieser generiert eine zufällige Zahl zwischen 0 und 100 mit
Rng::gen_range
:Vergessen Sie nicht, fügen Sie die
rand
Abhängigkeit von der Ladung.toml:In der Dokumentation für
Rng::gen_range
Staaten:Uniform
können verwendet werden, um erzeugen ein einziger Wert:Spielplatz
Oder generieren Sie einen iterator, der Werte:
Spielplatz
rand::thread_rng
. play.rust-lang.org/...rand::thread_rng
. Übrigensrand
ist instabil, jetzt, so, müssen Sie#![feature(rand)]
an den Anfang der Datei und verwenden Sie die nächtlichen rustc. Alles was ich tun möchte ist etwas testen; ich bin das in der Nähe nur mit dem Crand()
Funktion durch FFI und nannte es einen Tag.rand = "0.3"
inCargo.toml
Datei obwohl.