تطابق مقادیر
کلمه کلیدی 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 با کمک
|
به شرط های تطبیق الگو اضافه میشود.