Wie erstelle ich einen Vec aus einem Bereich und mische ihn?

8
%Vor%

Ich habe den folgenden Code:

%Vor%

und den folgenden Fehler erhalten:

%Vor%

Ich glaube, ich verstehe, dass der Inhalt von Vektoren und Slices unveränderlich ist und das den Fehler hier verursacht, aber ich bin unsicher.

Die Signatur von as_mut_slice ist pub fn as_mut_slice<'a>(&'a mut self) -> &'a mut [T] , also sollte die Scheibe änderbar sein, aber irgendwie nicht.

Ich weiß, dass es eine einfache Lösung geben muss, aber ich habe mein Bestes versucht und konnte es nicht zum Laufen bringen.

    
le_me 25.09.2014, 08:32
quelle

2 Antworten

14

Sie sind sehr nah dran. Dies sollte funktionieren:

%Vor%

&mut [T] ist implizit mit &[T] kombinierbar, und Sie haben mit slice die Variable &[uint] annotiert, sodass das Segment unveränderlich wurde: &mut [uint] wurde in &[uint] umgewandelt. mut für die Variable ist hier nicht relevant, da Slices nur in Daten ausgelagert werden, die jemand anderem gehört. Daher haben sie keine vererbte Veränderlichkeit - ihre Veränderlichkeit ist in ihren Typen kodiert.

Tatsächlich benötigen Sie keine Annotation für slice . Dies sollte auch funktionieren:

%Vor%

Sie sollten den offiziellen Leitfaden lesen, in dem die Konzepte von Eigentum und Fremdkapital und ihre Interaktion mit Wandelbarkeit erläutert werden .

    
Vladimir Matveev 25.09.2014, 09:46
quelle
11

Sie könnten so etwas tun:

%Vor%

Ich habe Ihr Setup geändert, weil range(x, y) zugunsten von x..y und uint zugunsten von usize abgelehnt wurde.

mischen

    
Akavall 29.12.2015 16:49
quelle