Перевантаження операторів (F#), Microsoft Docs

У цьому розділі описується перевантаження арифметичних операторів у класі чи типі запису, і навіть на глобальному рівні.

У попередній синтаксичної конструкції operator-symbol є одним з операторів: +, -, *, /, = і т. д. parameter-list задає операнди в тому порядку, в якому вони йдуть у звичайному синтаксисі для даного оператора. method-body створює результуюче значення.

Перевантаження операторів для операторів мають бути статичними. У перевантаження операторів для унарних операторів, таких як + і -, необхідно використовувати тильду (

Наступний код ілюструє векторний клас, що має лише 2 оператори, один для унарного мінус та інший для множення скалярними. У прикладі необхідні два навантаження для скалярного множення, оскільки оператор повинен працювати незалежно від порядку, в якому йдуть вектор і скаляр.

Створення нових операторів

Можна перевантажувати всі стандартні оператори, а також створювати нові оператори із послідовностей певних символів. Допустимі операторні символи — !, %, &, *, +, -, ., /, , ?, @, ^, і

має спеціальне значення: він робить оператор унарним і є частиною послідовності символів оператора. Не кожен оператор можна зробити унарним, як описано в підрозділі Префіксні та інфіксні оператори далі в цьому розділі.

Залежно від того, яка саме послідовність символів використовується, оператор матиме певні пріоритет та асоціативність. Асоціативність може лівою (обчислення відбувається зліва направо) або правою (праворуч наліво) і використовується щоразу, коли в послідовності присутні оператори з однаковим пріоритетом без дужок.

Операторний символ. не впливає напріоритет, тому, наприклад, якщо потрібно визначити власну версію множення, що має такі ж пріоритет та асоціативність, що й звичайне множення, можна створити такі оператори, як .*.

Таблицю, в якій наведено пріоритет усіх операторів у мові F#, можна знайти у розділі Довідник символів та операторів (F#).

Імена перевантажених операторів

Коли компілятор F# компілює вираз з оператором, він формує метод з іменем, що генерується компілятором для цього оператора. Це ім'я вказується в тексті мовою MSIL для методу, а також у відображенні та IntelliSense. Зазвичай використовувати ці імена у коді F# не потрібно.

У наступній таблиці наведено стандартні оператори та відповідні їм імена, що генеруються.