تطابق مقادیر
کلمه کلیدی match به شما اجازه میدهد یک مقدار را با یک یا چند الگو مطابقت دهید. مقایسهها از بالا به پایین انجام میشوند و اولین تطابق انتخاب میشود.
الگوها می توانند مقادیر ساده ای باشند، شبیه به switch در C و ++C:
#[rustfmt::skip] fn main() { let input = 'x'; match input { 'q' => println!("ترک کردن"), 'a' | 's' | 'w' | 'd' => println!("حرکت در اطراف"), '0'..='9' => println!("ورودی شماره"), key if key.is_lowercase() => println!("حروف کوچک: {key}"), _ => println!("یک چیز دیگر"), } }
الگوی _ یک الگوی عام (Wildcard) است که با هر مقداری مطابقت دارد. عبارتها باید جامع باشند، به این معنی که همه احتمالات را پوشش دهند، بنابراین _ اغلب به عنوان آخرین حالت برای پوشش تمامی موارد استفاده میشود.
match میتواند به عنوان یک عبارت استفاده شود. دقیقاً مانند if، هر شاخه match باید از یک تایپ باشد. تایپ بازگشتی، تایپ آخرین عبارت در بلاک است، اگر وجود داشته باشد. در مثال بالا، تایپ بازگشتی () است.
یک متغیر در الگو (key در این مثال) یک اتصال ایجاد میکند که میتوان از آن در بخش مطابقت استفاده کرد.
یک guard در عبارت match باعث میشود که آن شاخه تنها در صورتی مطابقت داشته باشد که شرط برقرار باشد.
نکات کلیدی:
-
بهتر است که اشاره کنید چطوری میتوان از کاراکترهای خاص در الگو استفاده کرد
|به عنوانor..برای تعیین همه محدوده یا تا جایی که میتوان گسترش یابد1..=5نمایانگر یک محدوده خاص است_نمایانگر هر حالتی است
-
guard های تطبیق به عنوان یک ویژگی سینتکس جداگانه دسته بندی میشوند, زمانی مهم و ضروری هستند که بخواهیم ایده های پیچیده تر از الگوهای ساده بیان کنیم.
-
آنها با عبارت
ifجداگانه ای در داخل یک شاخه تطبیق هستند یکسان نیستند. یک عبارتifدر داخل بلاک شاخه (پس از=>) پس از ورود به اون شاخه خاص صدا زده میشود. اگر شرطifبرقرار نباشد کاری به سایر شاخه های عبارتmatchاصلی ندارد. -
شرط تعریف شده در guard با کمک
|به شرط های تطبیق الگو اضافه میشود.