گیدو ون روسوم
پیاده سازی جدید بسیار شبیه عملگر "Match" ارائه شده در Scala، Rust و F# است که نتیجه یک عبارت مشخص شده را با لیستی از الگوهای فهرست شده در بلوک ها بر اساس عملگر "case" مقایسه می کند. برخلاف اپراتور "switch" موجود در C، جاوا و جاوا اسکریپت، عبارات مبتنی بر "مطابقت" چیزهای بیشتری را ارائه می دهند.
def http_error(وضعیت):
وضعیت مسابقه:
مورد 400:
بازگشت "درخواست بد"
مورد 401|403|404:
بازگشت "مجاز نیست"
مورد 418:
بازگشت "من یک قوری هستم"
مورد_:
بازگشت "چیزی دیگر"
برای مثال، میتوانید اشیا، تاپلها، لیستها و دنبالههای دلخواه را برای اتصال متغیرها بر اساس مقادیر موجود باز کنید. مجاز به تعریف الگوهای تو در تو، استفاده از شرایط "if" اضافی در الگو، استفاده از ماسک ("[x, y، *rest]")، نگاشت کلید/مقدار (به عنوان مثال، {"پهنای باند": b، "تاخیر" ”: l} برای استخراج مقادیر "پهنای باند" و "تأخیر" و فرهنگ لغت)، استخراج الگوهای فرعی (":=" عملگر)، از ثابت های نامگذاری شده در قالب استفاده کنید. در کلاسها، میتوان رفتار تطبیق را با استفاده از روش "__match__()" سفارشی کرد.
از کلاس های داده وارد کلاس داده می شود
@dataclass
نقطه کلاس:
x:int
y:int
def whereis(point):
نقطه تطبیق:
Case Point (0, 0):
چاپ ("منشا")
Point (0, y):
چاپ (f"Y={y}")
Point (x, 0):
چاپ (f"X={x}")
case Point():
چاپ ("جایی دیگر")
مورد_:
چاپ ("نقطه ای نیست")
نقطه تطبیق:
مورد نقطه (x, y) اگر x == y:
چاپ (f"Y=X در {x}")
Point (x, y):
چاپ (f"نه روی مورب")
قرمز، سبز، آبی = 0، 1، 2
رنگ مطابقت:
مورد .قرمز:
چاپ ("من قرمز می بینم!")
مورد .سبز:
چاپ ("علف سبز است")
مورد .BLU
E:
چاپ ("من بلوز را احساس می کنم :(")
مجموعه ای برای بررسی آماده شده است
منبع: opennet.ru