Wie erstelle ich ein Vec von einer Palette und mische es?
Ich habe den folgenden code:
extern crate rand;
use rand::{thread_rng, Rng};
fn main() {
let mut vec: Vec<u32> = (0..10).collect();
let mut slice: &[u32] = vec.as_mut_slice();
thread_rng().shuffle(slice);
}
und die folgende Fehlermeldung erhalten:
error[E0308]: mismatched types
--> src/main.rs:9:26
|
9 | thread_rng().shuffle(slice);
| ^^^^^ types differ in mutability
|
= note: expected type `&mut [_]`
found type `&[u32]`
Ich glaube, ich verstehe, dass der Inhalt von Vektoren und Scheiben ist unveränderlich, und das verursacht die Fehler hier, aber ich bin mir nicht sicher.
Die Signatur von as_mut_slice
ist pub fn as_mut_slice<'a>(&'a mut self) -> &'a mut [T]
, so dass die Scheibe sollte veränderbar, aber es irgendwie nicht.
Ich weiß, dass es eine einfache Lösung, aber ich versuchte mein bestes und konnte es nicht bekommen, um zu arbeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist sehr nahe. Sollte dies funktionieren:
&mut [T]
implizit coercible zu&[T]
, und Sie kommentierten dieslice
variable mit&[u32]
, so dass die Scheibe wurde unveränderlich:&mut [u32]
war gezwungen zu&[u32]
.mut
auf die variable ist hier nicht relevant, weil Scheiben sind nur leiht in Daten, die im Besitz von jemand anderem, so dass Sie nicht geerbt haben Wandlungsfähigkeit - Ihre Wandlungsfähigkeit ist kodiert in Ihre Arten.In der Tat, brauchen Sie nicht, eine Anmerkung auf
slice
überhaupt. Dies funktioniert so gut:Brauchen Sie nicht einmal die temporäre variable:
Sollten Sie Lesen Der Rost Programmiersprache wie es erklärt die Konzepte von Besitz und Ausleihe und wie Sie interagieren mit Veränderlichkeit.
Update: seit rand v0.6.0, die
Rng::shuffle
Methode ist jetzt veraltet. Stattdessenrand::seq::SliceRandom
Merkmal sollte verwendet werden. Es bietet dieshuffle()
- Methode auf allen Scheiben, die akzeptiert, dass eineRng
Beispiel:Sehen es auf Spielplatz.
thread_rng().shuffle
ist jetzt veraltet. Weißt du, wie wir sollen shuffle ein Vektor jetzt? (Ich denke, dass sollten wir nutzen, ein Merkmal, aber ich bin nicht erfahren genug, in Rust zu wissen, wie man das doch machen.)Können Sie
shuffle
wie diese:thread_rng().shuffle
ist jetzt veraltet. Weißt du, wie wir sollen shuffle ein Vektor jetzt? (Ich denke, dass sollten wir nutzen, ein Merkmal, aber ich bin nicht erfahren genug, in Rust zu wissen, wie man das doch machen.)