
ภาษาอังกฤษ |中文
ฝึกฝนสนิมด้วยตัวอย่างที่ท้าทายการออกกำลังกายและโครงการ
หนังสือเล่มนี้ได้รับการออกแบบมาเพื่อการดำน้ำได้อย่างง่ายดายและมีทักษะด้วยการเกิดสนิมมันใช้งานง่ายมาก สิ่งที่คุณต้องทำคือทำให้การออกกำลังกายแต่ละครั้งโดยไม่มีข้อผิดพลาดและความตื่นตระหนก!
ตัวอย่างและแบบฝึกหัดส่วนหนึ่งของเราถูกยืมมาจาก Rust โดยตัวอย่างขอบคุณสำหรับผลงานที่ยอดเยี่ยมของคุณ!
แม้ว่าพวกเขาจะยอดเยี่ยมมาก แต่เราก็มีอาวุธลับของเราเอง :)
มีสามส่วนในแต่ละบท: ตัวอย่างการออกกำลังกายและการปฏิบัติ
นอกจากตัวอย่างเรามี a lot of exercises คุณสามารถอ่านแก้ไขและเรียกใช้ออนไลน์ได้
ครอบคลุมเกือบทุกด้านของการเกิดสนิมเช่น async/รอ, เธรด, การซิงค์ดั้งเดิม, การเพิ่มประสิทธิภาพ, ไลบรารีมาตรฐาน, ห่วงโซ่เครื่องมือ, โครงสร้างข้อมูลและอัลกอริทึมเป็นต้น
การออกกำลังกายทุกครั้งมีวิธีแก้ปัญหาของตัวเอง
ความยากลำบากโดยรวมสูงขึ้นเล็กน้อยและง่ายต่อการใช้งานง่ายมาก: ง่าย? ปานกลาง ?? แข็ง ??? สุดฮาร์ด ????
สิ่งที่เราต้องการทำคือเติมช่องว่างระหว่างการเรียนรู้และการเริ่มต้นกับโครงการจริง
ขอบคุณผู้มีส่วนร่วมของเราทุกคน!
- ขอขอบคุณเป็นพิเศษสำหรับบรรณาธิการภาษาอังกฤษของเรา:
นกกระจอกเทศ |
เราใช้ MDBook สร้างแบบฝึกหัดของเรา คุณสามารถทำงานในพื้นที่โดยมีขั้นตอนด้านล่าง:
$ 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 มีลักษณะคล้ายกับ Tuples มันได้เพิ่มความหมายของชื่อโครงสร้าง แต่ไม่มีฟิลด์ชื่อ มันมีประโยชน์เมื่อคุณต้องการให้ชื่อ Tuple ทั้งหมด แต่ไม่สนใจชื่อของฟิลด์
// 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 ) ;
}- ภายในการทำลายโครงสร้างของตัวแปรเดี่ยวทั้งการผูกรูปแบบการเคลื่อนที่และการอ้างอิงโดยการอ้างอิงสามารถใช้ในเวลาเดียวกัน การทำเช่นนี้จะส่งผลให้มีการเคลื่อนไหวบางส่วนของตัวแปรซึ่งหมายความว่าส่วนของตัวแปรจะถูกย้ายในขณะที่ส่วนอื่น ๆ อยู่ ในกรณีเช่นนี้ตัวแปรหลักไม่สามารถใช้งานได้หลังจากนั้นโดยรวมอย่างไรก็ตามชิ้นส่วนที่อ้างอิงเท่านั้น (และไม่ย้าย) ยังสามารถใช้งานได้
// 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 ) ;
}- ตัวป้องกันการจับคู่เป็นเพิ่มเติมหากเงื่อนไขที่ระบุหลังจากรูปแบบในแขนจับคู่ที่ต้องจับคู่พร้อมกับการจับคู่รูปแบบเพื่อเลือกแขนนั้น
// 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 => ( ) ,
}
}