یک برچسب در حال حاضر با نام شاخه ارائه شده وجود دارد. بسیاری از دستورات GIT نام برچسب و شاخه را می پذیرند ، بنابراین ایجاد این شاخه ممکن است باعث رفتار غیر منتظره شود. آیا مطمئن هستید که می خواهید این شاخه را ایجاد کنید؟
roslyn / docs / ویژگی ها / الگوها
- به پرونده T بروید
- به خط L بروید
- مسیر کپی
- پیوند ثابت را کپی کنید
این تعهد متعلق به هیچ شعبه ای در این مخزن نیست و ممکن است متعلق به یک چنگال در خارج از مخزن باشد.
- با دسک تاپ باز کنید
- مشاهده خام
- محتوای خام را کپی کنید و محتوای خام را کپی کنید
محتوای خام را کپی کنید
محتوای خام را کپی کنید
موضوعات باز برای طراحی و اجرای این ویژگی را می توان در Patte. Work. md یافت.
تطبیق الگوی برای c#
الگوی تطبیق الگوی برای C# بسیاری از مزایای انواع داده های جبری و تطبیق الگوی را از زبان های عملکردی امکان پذیر می کند ، اما به گونه ای که به راحتی با احساس زبان اساسی ادغام شود. ویژگی های اصلی عبارتند از: انواع ضبط ، انواع مختلفی که معنی معنایی آنها با شکل داده ها توصیف می شود (به عنوان یک ویژگی جداگانه درمان می شود). و تطبیق الگوی ، که یک شکل جدید است که تجزیه چند سطحی بسیار مختصر از این انواع داده را امکان پذیر می کند. عناصر این رویکرد از ویژگی های مرتبط در زبان های برنامه نویسی F# و Scala الهام گرفته شده است.
اپراتور IS برای آزمایش بیان در برابر یک الگوی گسترش یافته است.
این شکل از رابطه_ بیان علاوه بر اشکال موجود در مشخصات C# است. این یک خطای کامپایل در زمان است اگر رابطه_ بیان به سمت چپ توکن IS یک مقدار تعیین نکند یا نوع نداشته باشد.
یک ثابت_پاتن که به عنوان سمت راست یک IS_PATTERN_EXPRESSION ظاهر می شود ، به صورت نحوی محدود می شود که یک تغییر شکل باشد ، حتی اگر یک ثابت_پاتن که در جای دیگر ظاهر می شود ، می تواند به طور نحوی هر بیان باشد. برای سادگی که محدودیت در گرامر نشان داده نشده است.
هر شناسه این الگوی متغیر محلی جدید را معرفی می کند که قطعاً پس از صحیح بودن اپراتور IS اختصاص داده می شود (یعنی قطعاً در صورت واقعی بودن اختصاص داده می شود).
توجه: از نظر فنی ابهام بین نوع در بیان IS و ثابت_patte در is_patte_expression وجود دارد ، که هر یک از آنها ممکن است یک پارس معتبر از یک شناسه واجد شرایط باشد. ما سعی می کنیم آن را به عنوان نوعی سازگاری با نسخه های قبلی زبان متصل کنیم. فقط در صورت عدم موفقیت ، ما آن را به عنوان یک الگوی ثابت حل می کنیم.
از الگوهای در اپراتور IS و در یک سوئیچ_تاتوم استفاده می شود تا شکل داده هایی را که داده های ورودی در برابر آن مقایسه می شوند ، بیان کنند. الگوهای ممکن است بازگشتی باشد به گونه ای که ممکن است بخش هایی از داده ها در برابر الگوی زیر همسان شوند.
این یک خطای معنایی است اگر هر یک از زیربناها از Propert_patte حاوی شناسه نباشد (باید از فرم دوم باشد ، که دارای شناسه است).
هیچ الگوی خاص بررسی تهی وجود ندارد ، زیرا امکان بررسی Null به عنوان یک مورد خاص از یک الگوی خاصیت بی اهمیت از بین می رود. برای بررسی اینکه رشته S غیر تهی است ، می توانید هر یک از فرم های زیر را بنویسید
هر الگوی در برابر یک عملگر ورودی فرضی قرار دارد. در مورد is_patte_expression ، یعنی مقدار سمت چپ. در مورد شاخه ای از عبارت سوئیچ ، این عبارت سوئیچ است. در مورد الگوی تو در تو ، این نتیجه استخراج مقدار مربوطه از شیء محصور است.
type_patte هر دو آزمایش که عملگر ورودی دارای مقدار یک نوع معین است و در صورت موفقیت آزمون ، آن را به آن نوع می اندازد. این یک متغیر محلی از نوع داده شده نامگذاری شده توسط Simple_designation را معرفی می کند. این متغیر محلی قطعاً هنگامی که نتیجه عملکرد تطبیق الگوی صحیح باشد ، اختصاص می یابد.
معنایی زمان اجرا این عبارت این است که نوع زمان اجرای عملگر ورودی را در برابر نوع در الگوی آزمایش می کند. اگر از آن نوع زمان اجرا (یا برخی از زیرگروه ها) باشد ، نتیجه اپراتور IS درست است. اگر Simple_Designation یک تک_ variable_designation باشد ، یک متغیر محلی جدید را به نام شناسه اعلام می کند که در صورت صحت نتیجه ، مقدار عمل ورودی را اختصاص می دهد.
ترکیبی خاص از نوع استاتیک سمت چپ و نوع داده شده ناسازگار در نظر گرفته می شود و منجر به خطای زمان کامپایل می شود. در صورت وجود تبدیل هویت ، تبدیل مرجع ضمنی ، تبدیل بوکس ، تبدیل مرجع صریح و یا تبدیل بدون جعبه از E به T ، یک مقدار از نوع E با نوع t سازگار است. این یک خطای کامپایل در زمان است اگر یک بیان از نوع E با نوع الگوی نوع که با آن مطابقت دارد ، با نوع سازگار با نوع سازگار نباشد.
توجه: این برای پارامترهای نوع کاملاً صحیح نیست ، که باید همیشه الگوی در نظر گرفته شود.
الگوی نوع برای انجام تست های نوع اجرا از انواع مرجع مفید است و اصطلاحات را جایگزین می کند
با کمی مختصر تر
اگر نوع یک نوع مقدار قابل برگشت باشد ، خطایی است.
از الگوی نوع می توان برای آزمایش مقادیر انواع قابل تهی استفاده کرد: مقدار از نوع قابل تهی (یا یک جعبه جعبه) اگر مقدار غیر تهی باشد و نوع T2 باشد ، یا نوع پایه یا نوع پایه یا نوع پایه یا نوع پایه یا نوع پایه یا نوع پایه یا نوع پایه یا نوع پایه را با یک الگوی T2 مطابقت می دهد. رابط t. به عنوان مثال ، در قطعه کد
شرط بیانیه IF در زمان اجرا صحیح است و متغیر V مقدار 3 نوع int را دارد.
یک الگوی ثابت مقدار یک عبارت را در برابر یک مقدار ثابت آزمایش می کند. ثابت ممکن است هر بیان ثابت مانند یک تحت اللفظی ، نام یک متغیر const اعلام شده یا ثابت شمارش باشد.
اگر هر دو E و C از انواع انتگرال باشند ، اگر نتیجه بیان E == C درست باشد ، این الگوی با هم مطابقت دارد.
در غیر این صورت الگوی در صورت تطبیق در نظر گرفته می شود. در این حالت اگر نوع استاتیک E با نوع ثابت سازگار نباشد ، یک خطای زمان کامپایل است.
یک عملگر ورودی همیشه با شناسه الگوی var مطابقت دارد. به عبارت دیگر ، یک مسابقه با یک الگوی VAR با یک ساده_دسیگور همیشه موفق می شود. در زمان اجرا ، مقدار عملگر ورودی به یک متغیر محلی تازه معرفی شده محدود می شود. نوع متغیر محلی نوع استاتیک عملگر ورودی است.
اگر نام VAR به نوعی متصل شود که در آن از var_patte استفاده می شود ، خطایی است.
توجه: ما باید معناشناسی را توصیف کنیم که تعیین یک TUPLE_DESIGNATION است.
یک عملگر ورودی همیشه با دور انداختن _ مطابقت دارد. به عبارت دیگر ، هر بیان با الگوی دور انداختن مطابقت دارد.
یک الگوی خاصیت عملیات ورودی را آزمایش می کند تا ببیند آیا نمونه ای از یک نوع خاص است ، و همچنین برخی از خصوصیات یا زمینه های در دسترس آن را آزمایش می کند تا ببیند آیا آنها با زیرگروه ها مطابقت دارند یا خیر.
نوع مورد آزمایش به شرح زیر انتخاب می شود:
- اگر بخشی از Propert_patte وجود داشته باشد ، این نوع آزمایش شده است. نوع نباید یک نوع مقدار قابل تهی باشد.
- در غیر این صورت اگر عمل ورودی از نوع مقدار قابل تهی نباشد ، از نوع استاتیک آن استفاده می شود.
- در غیر این صورت از نوع زیرین نوع عملگر ورودی استفاده می شود.
Simple_designation ، اگر یک تک_ variable_designation باشد ، متغیر تازه معرفی شده از این نوع را نامگذاری می کند.
هر یک از زیرگروه ها ظاهر می شوند int propert_subpatte یک خاصیت یا فیلد مورد بررسی را مشخص می کنند. Subpatte باید از فرم دوم باشد و شناسه موجود باشد. شناسه باید یک ویژگی یا فیلد نمونه در دسترس و خواندنی از نوع مورد آزمایش را نامگذاری کند.
در زمان اجرا ، اگر مقدار آن خاصیت یا میدان ، هنگامی که به عنوان عملگر ورودی الگوی Subpatte رفتار می شود ، یک زیرمجموعه رضایت دارد.
اگر تست نوع موفق شود و تمام زیرگروه ها راضی باشند ، یک الگوی خاصیت مطابقت دارد. ترتیب مطابقت با زیرگروه ها مشخص نشده است ، و یک مسابقه شکست خورده ممکن است همه زیرگروه ها را در زمان اجرا آزمایش نکند.
یک الگوی ساختارشکنی شبیه به یک Propert_patte است ، اما شامل ساختارشکنی یک Tuple یا فراخوانی یک روش ساختارشکنی تعریف شده توسط کاربر است.
اگر یک الگوی ساختارشکنی دارای یک زیرزمین واحد باشد اما نوع آن را حذف می کند ، این یک خطا است.
نوع مورد آزمایش همانطور که در Property_Patte تعیین می شود. این نوع باید یک نوع Tuple باشد که کاردینال بودن آن همان تعداد زیرگروه ها بین پرانتز است ، یا باید نوعی باشد که حاوی یک روش ساختارشکنی منحصر به فرد با آن تعداد پارامترهای خارج باشد ، همانطور که برای ویژگی تکلیف ساختارشکنی تعریف شده است.
اگر مقدار بازیابی شده از تجزیه و تحلیل عملگر ورودی برای آن موقعیت ، هنگامی که به عنوان عملگر ورودی برای الگوی مربوطه درمان می شود ، یک زیرگروه بین پرانتز در یک desoronstruction_patte رضایت دارد. اگر چنین زیرزمینی دارای شناسه ای باشد ، اگر این نام عنصر Tuple مربوطه یا پارامتر Dexonstruct Out نباشد ، یک خطای زمان کامپایل است.
اگر تست نوع موفق شود و تمام زیرزمین ها راضی باشند ، یک الگوی ساختارشکنی مطابقت دارد. ترتیب مطابقت با زیرگروه ها مشخص نشده است ، و یک مسابقه شکست خورده ممکن است همه زیرگروه ها را در زمان اجرا آزمایش نکند.
توجه: این مشخصات هنوز برای تطبیق موقعیتی با ItuPle رفتار نمی کند.
یک سوئیچ_ اظهارات برای پشتیبانی از معناشناسی مانند سوئیچ برای یک زمینه بیان اضافه می شود.
نحو زبان C# با تولیدات نحوی زیر افزایش می یابد:
Switch_expression به عنوان یک بیان_ستاتیس مجاز نیست.
The type of the switch_expression is the best common type of the expressions appearing to the right of the =>نشانه های SWITCH_EXPRESSION_CASE s.
این خطایی است اگر کامپایلر بتواند اثبات کند (با استفاده از مجموعه ای از تکنیک هایی که هنوز مشخص نشده است) که برخی از الگوی Switch_Section نمی توانند بر نتیجه تأثیر بگذارند زیرا برخی از الگوی قبلی همیشه مطابقت دارند.
در زمان اجرا ، نتیجه SWITCH_EXPRESSION مقدار بیان اولین switch_expression_case است که برای آن عبارت در سمت چپ سوئیچ_ اگزوز با الگوی switch_expression_case مطابقت دارد ، و برای آن عبارت از where_clause switch_expression_case است.، در صورت وجود ، به درست ارزیابی می شود.
توجه: ما باید مشخص کنیم که اگر مجموعه موارد ناقص باشد ، چه در زمان کامپایل و چه در زمان اجرا ، چه اتفاقی می افتد.
برخی از نمونه های تطبیق الگوی
فرض کنید ما مجموعه ای از انواع بازگشتی را برای نشان دادن عبارات تعریف می کنیم (طبق یک پیشنهاد جداگانه):
اکنون می توانیم یک تابع را برای محاسبه مشتق (غیرقابل کنترل) یک عبارت تعریف کنیم:
تجارت با گزینههای باینری...
ما را در سایت تجارت با گزینههای باینری دنبال می کنید
برچسب :
نویسنده : نازنین فراهانی
بازدید : 36
تاريخ : سه
شنبه
16 خرداد
1402 ساعت: 16:17