
اللغة الإنجليزية |中文
تدرب على الصدأ مع الأمثلة الصعبة والتمارين والمشاريع
تم تصميم هذا الكتاب بسهولة الغوص فيه والحصول على ماهر مع الصدأ ، إنه سهل الاستخدام للغاية. كل ما عليك فعله هو جعل كل تمرين تجميع بدون أخطاء وذعر!
يتم استعارة جزء من أمثلةنا وتماريننا من الصدأ ، شكرًا على أعمالك العظيمة!
على الرغم من أنها رائعة جدًا ، لدينا أسلحة سرية خاصة بنا :)
هناك ثلاثة أجزاء في كل فصل: الأمثلة والتمارين والممارسات
إلى جانب الأمثلة ، لدينا a lot of exercises ، يمكنك قراءة وتحريرها وتشغيلها عبر الإنترنت
تغطية جميع جوانب الصدأ تقريبًا ، مثل Async/Eyait و Threads و Sync Primitives و Advantage و Libraries و Chain Tools و Hustures والخوارزميات وما إلى ذلك.
كل تمرين له حلوله الخاصة
الصعوبات الشاملة أعلى قليلاً ومن السهل إلى الصعوبة: سهلة؟ واسطة ؟؟ صعب ؟؟؟ سوبر صعب ؟؟؟؟
ما نريد القيام به هو ملء الفجوة بين التعلم والبدء في مشاريع حقيقية.
شكرا لجميع المساهمين لدينا!
؟ شكر خاص لمحرر اللغة الإنجليزية لدينا:
tanish-eagle |
نستخدم 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 => ( ) ,
}
}