
Anglais |中文
Pratiquez la rouille avec des exemples, des exercices et des projets difficiles
Ce livre a été conçu pour plonger facilement et être qualifié de rouille, il est très facile à utiliser. Tout ce que vous avez à faire est de faire la compilation de chaque exercice sans erreurs et paniques!
Une partie de nos exemples et exercices est emprunté à Rust par l'exemple, merci pour vos belles œuvres!
Bien qu'ils soient tellement géniaux, nous avons nos propres armes secrètes :)
Il y a trois parties dans chaque chapitre: exemples, exercices et pratiques
En plus d'exemples, nous avons a lot of exercises , vous pouvez les lire, les modifier et les exécuter en ligne
Couvrant presque tous les aspects de la rouille, tels que l'async / attendre, les threads, les primitives de synchronisation, l'optimisation, les bibliothèques standard, la chaîne d'outils, les structures de données et les algorithmes, etc.
Chaque exercice a ses propres solutions
Les difficultés globales sont un peu plus élevées et de facile à super dure: facile? moyen ?? dur ??? Super dur ????
Ce que nous voulons faire, c'est combler l'écart entre l'apprentissage et le démarrage avec de vrais projets.
Merci à tous nos contributeurs!
? Un merci spécial à notre éditeur anglais:
Tanais-aigle |
Nous utilisons MDBook en train de construire nos exercices. Vous pouvez fonctionner localement avec les étapes ci-dessous:
$ 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/??? La structure Tuple ressemble à des tuples, il a ajouté une signification que le nom de structure fournit mais n'a pas de champs nommés. C'est utile lorsque vous voulez donner un nom à l'ensemble du Tuple, mais ne vous souciez pas des noms des champs.
// 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 ) ;
}?? Dans la destruction d'une seule variable, les liaisons de motifs de bymoue et de référence peuvent être utilisées en même temps. Cela entraînera un mouvement partiel de la variable, ce qui signifie que des parties de la variable seront déplacées pendant que d'autres pièces restent. Dans un tel cas, la variable parent ne peut pas être utilisée par la suite dans son ensemble, mais les pièces qui ne sont référencées (et non déplacées) peuvent toujours être utilisées.
// 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 ) ;
}?? Un garde-match est une condition si celle-ci supplémentaire spécifiée après le motif dans un bras de match qui doit également correspondre, ainsi que la correspondance du motif, pour que ce bras soit choisi.
// 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 => ( ) ,
}
}