Einführung Obwohl Rust sein Rust-Buch bereitstellt, hatte ich Schwierigkeiten, das Schlüsselwort zu verstehen. Ich fragte mich: „Bin ich der Einzige, der dieses Problem hat?“ Eine schnelle Google-Suche bestätigte, dass ich nicht allein war. mut Aus diesem Grund habe ich beschlossen, diesen Artikel zu schreiben, um eine detaillierte Erklärung des Schlüsselworts zu geben. Dieser Artikel richtet sich an diejenigen, die mit Hochsprachen wie Python oder JavaScript arbeiten. mut Die Variablen Um eine unveränderliche Variable in Rust zu erstellen, schreiben Sie einfach . Es ist unkompliziert. Wenn Sie eine Variable erstellen möchten, die später mutiert werden kann, fügen Sie einfach das Schlüsselwort nach hinzu. Rust hat eine hilfreiche Konvention, die die Klarheit der Absichten fördert. let x = 1337 mut let Durch das Hinzufügen des Schlüsselworts werden andere darüber informiert, dass diese Variable an einer anderen Stelle im Code geändert wird. Okay. mut Lass es uns visualisieren. Zwei Variablen hier, und . let mut x = 1337 let y = 42 Die Referenzen Im Moment ist alles unkompliziert. Bei der Verwendung Referenzen wird es jedoch etwas komplizierter. Lassen Sie uns welche erstellen. mut let mut x = 1337; let y = 42; let x_ref = &mut x; let y_ref = &y; Ich habe zwei Referenzen erstellt (oder im Sinne von Rust „geliehen“). Eine davon ist eine veränderbare Referenz und die andere ist eine schreibgeschützte Referenz. Lassen Sie uns dafür noch einmal ein Schema erstellen. Im angegebenen Schema habe ich 4 Variablen, von denen 2 Referenzen sind. Beide Referenzvariablen sind unveränderlich und haben nach nicht das Schlüsselwort , was bedeutet, dass ich nicht ändern kann, worauf sie verweisen. Allerdings kann ich den Wert, auf den sie verweisen, immer noch ändern. let mut *x_ref = 777; Wenn Sie dies schreiben, wird sich der Rust-Compiler nicht beschweren und der Wert von (nicht der Verweis selbst) ändert sich in . Es gibt jedoch ein rotes Quadrat im Schema, das darauf hinweist, dass die Veränderlichkeitsoption fehlt. Warum kann ich also den Wert ändern, auf den es sich bezieht? x 777 x_ref Kommen wir zurück zum Schema für . let x_ref = &mut x Der erste weiße Block enthält den Namen: . Der zweite informiert mich über den in dieser Variablen gespeicherten Typ. In seiner vollständigen Form, ohne implizite Typanmerkungen, kann ich wie folgt schreiben: x_ref let x_ref: &mut i32 = &mut x; Ich kann das so interpretieren: Lassen Sie uns eine namens erstellen, die einen auf enthält, und sie sofort mit dem auf den -Wert in der Variablen initialisieren. unveränderliche Variable x_ref veränderlichen Verweis i32 veränderlichen Verweis i32 x Das bedeutet, dass ich den Wert ändern kann, auf den es zeigt, aber ich kann den Wert (oder die Adresse) der Referenz nicht ändern. Mit anderen Worten, ich kann nicht so etwas schreiben wie: let x_ref: &mut i32 = &mut x; let mut z = 0; x_ref = &mut z; // Not allowed! In Bezug auf die Schemata möchte ich die Richtung ändern, in die der Pfeil im obigen Codeblock zeigt. Selbst wenn die Variable veränderbar ist, kann ich den Pfeil jedoch nicht ändern, da das Problem in der Unveränderlichkeit von selbst liegt. z x_ref Um die Pfeilrichtung zu ändern, muss ich die in der Variablen gespeicherte Adresse ändern. Dies kann ich jedoch nicht tun, da die Variable unveränderlich ist. x_ref Lass es uns tun! let mut x: i32 = 1337; let mut x_ref: &mut i32 = &mut x; // I've added mut before x_ref let mut z = 0; x_ref = &mut z; // Allowed! Es gibt hier rund um zu viele -Instanzen, oder? Beschreiben wir sie. x_ref mut : Ich erstelle eine veränderbare Variable mit dem Namen , was bedeutet, dass ich ihren Wert später ändern kann. let mut x_ref x_ref : Ich behaupte, dass die Variable veränderbare Verweise auf einen Wert vom Typ enthalten wird. &mut i32 i32 : Ich leihe mir die Variable aus (erhalte einen Verweis darauf). &mut x x Dann habe ich eine Variable namens erstellt und ihr den Wert zugewiesen. Als ich später schrieb, gab ich an, dass ich als eine veränderliche Variable verstehe, die nur Verweise auf Werte enthalten kann. z 0 x_ref = &mut z x_ref i32 Da der Typ von ist, kann ich seine Adresse der Variablen zuweisen. Um die Adresse von zu erhalten, habe ich die Syntax verwendet. z i32 x_ref z &mut z Das Schema. Der mentale Trick Schauen Sie sich in der Anweisung an, es sieht vielleicht etwas offensichtlich aus, aber ... = let mut x_ref = &mut x; … Ich sehe es als einen Teiler (besonders wenn man ihn um 90 Grad dreht), der die Aussage in zwei Unteraussagen aufteilt: links und rechts. Die linke Seite liefert Informationen selbst, während die rechte Seite uns informiert. über die Variable über den Wert Wenn ich den Dereferenzierungsoperator verwende, um den Wert zu ändern ... * *x_ref = 100; ... Ich ändere den Wert der Variablen nicht. Stattdessen ändere ich den Wert, auf den verweist. x_ref x_ref Unveränderliche Referenzen Ich habe vorher häufig verwendet. Was ist, wenn ich einige davon weglasse? mut let i = 1; let j = 2; let mut k = &i; Kann ich den Wert von hier ändern? Mit der Divider-Technik ist die Antwort recht einfach. Ich kann den Wert von ändern (ich sehe auf der linken Seite), aber der Wert (rechte Seite) ist eine unveränderliche Referenz auf (hier gibt es kein ). i k mut i mut Daher… let i = 1; let j = 2; let mut k = &i; k = &j; // This is legal. *k = 3; // This is not. Das Schema. Abschluss In diesem Artikel haben wir die Nuancen des Schlüsselworts und der Referenzen analysiert. Denken Sie daran, dass es einen Unterschied zwischen einer und einer gibt, die eine Referenz enthält. Unser Trick? mut veränderlichen Referenz veränderlichen Variablen Verwenden des -Zeichens als mentale Trennlinie, um Aufgaben in Rust besser zu verstehen. Diese einfache Visualisierung kann viele Verwirrungen beseitigen. = Viel Spaß beim Codieren!