
Englisch |中文
Üben Sie Rost mit herausfordernden Beispielen, Übungen und Projekten
Dieses Buch wurde so konzipiert, dass es leicht zu tauchen ist und mit Rost geschickt wird. Es ist sehr einfach zu bedienen. Alles, was Sie tun müssen, ist, jede Übung ohne Fehler und Panik kompilieren zu lassen!
Ein Teil unserer Beispiele und Übungen wird von Rost mit gutem Beispielsweise ausgeliehen. Vielen Dank für Ihre großartigen Werke!
Obwohl sie so großartig sind, haben wir unsere eigenen geheimen Waffen :)
In jedem Kapitel gibt es drei Teile: Beispiele, Übungen und Praktiken
Neben Beispielen haben wir a lot of exercises , Sie können sie lesen, bearbeiten und online ausführen
Abdecken fast aller Aspekte des Rostes, wie Async/Awit, Threads, Synchitive Primitive, Optimierung, Standardbibliotheken, Werkzeugkette, Datenstrukturen und Algorithmen usw.
Jede Übung hat ihre eigenen Lösungen
Die allgemeinen Schwierigkeiten sind etwas höher und von leicht bis super hart: einfach? Medium ?? hart ??? super hart ????
Wir wollen die Lücke zwischen Lernen und Beginn mit echten Projekten ausfüllen.
Vielen Dank an alle unsere Mitwirkenden!
? Besonderer Dank geht an unseren englischen Herausgeber:
Tanish-Eagle |
Wir verwenden MDBook -Erstellung unserer Übungen. Sie können lokal mit folgenden Schritten ausführen:
$ git clone [email protected]:sunface/rust-by-practice.git$ cargo install mdbook$ cd rust-by-practice && mdbook serve en/$ cd rust-by-practice && mdbook serve zh-CN/??? Tuple struct sieht Tupel ähnlich aus. Es hat hinzugefügt, was bedeutet, dass der Strukturname jedoch keine benannten Felder enthält. Es ist nützlich, wenn Sie dem gesamten Tupel einen Namen geben möchten, aber es ist mir egal, ob die Namen der Felder.
// fix the error and fill the blanks
struct Color ( i32 , i32 , i32 ) ;
struct Point ( i32 , i32 , i32 ) ;
fn main ( ) {
let v = Point ( ___ , ___ , ___ ) ;
check_color ( v ) ;
}
fn check_color ( p : Color ) {
let ( x , _ , _ ) = p ;
assert_eq ! ( x , 0 ) ;
assert_eq ! ( p . 1 , 127 ) ;
assert_eq ! ( ___ , 255 ) ;
}? In der Zerstörung einer einzelnen Variablen können gleichzeitig sowohl By-Move- als auch By-Referenz-Musterbindungen verwendet werden. Dies führt zu einem teilweisen Zug der Variablen, was bedeutet, dass Teile der Variablen bewegt werden, während andere Teile bleiben. In einem solchen Fall kann die übergeordnete Variable danach als Ganzes nicht verwendet werden, aber die Teile, auf die nur verwiesen (und nicht bewegt) werden, können weiterhin verwendet werden.
// fix errors to make it work
# [ derive ( Debug ) ]
struct File {
name : String ,
data : String ,
}
fn main ( ) {
let f = File {
name : String :: from ( "readme.md" ) ,
data : "Rust By Practice" . to_string ( )
} ;
let _name = f . name ;
// ONLY modify this line
println ! ( "{}, {}, {:?}" , f . name , f . data , f ) ;
}? Ein Match -Guard ist ein zusätzlicher If -Zustand, der nach dem Muster in einem Match -Arm angegeben wird, der ebenfalls zusammen mit dem Muster -Matching übereinstimmen muss, damit dieser Arm ausgewählt wird.
// fill in the blank to make the code work, `split` MUST be used
fn main ( ) {
let num = Some ( 4 ) ;
let split = 5 ;
match num {
Some ( x ) __ => assert ! ( x < split ) ,
Some ( x ) => assert ! ( x >= split ) ,
None => ( ) ,
}
}