Претоварване на оператор (F#), Microsoft Docs
Този раздел описва как да претоварвате аритметични оператори в клас или тип запис, както и на глобално ниво.
В предишната синтактична конструкция оператор-символ е един от операторите: +, -, *, /, = и т.н. списъкът с параметри указва операндите в реда, в който се появяват в нормалния синтаксис за този оператор. method-body създава получената стойност.
Претоварванията на операторите за операторите трябва да са статични. При претоварване на оператори унарните оператори като + и - трябва да използват тилда (
Следният код илюстрира векторен клас, който има само 2 оператора, един за унарен минус и друг за скаларно умножение. Примерът изисква две претоварвания за скаларно умножение, тъй като операторът трябва да работи независимо от реда, в който се следват векторът и скаларът.
Създаване на нови оператори
Можете да претоварвате всички стандартни оператори, както и да създавате нови оператори от поредици от определени знаци. Валидни операторни знаци са !, %, &, *, +, -, ., /, , ?, @, ^ и
има специално значение: прави оператора унарен и не е част от символната последователност на оператора. Не всеки оператор може да бъде унарен, както е описано в раздела Префиксни и инфиксни оператори по-късно в тази тема.
В зависимост от това коя последователност от знаци се използва, операторът ще има определен приоритет и асоциативност. Асоциативността може да бъде лява (оценката се извършва отляво надясно) или дясна (отдясно наляво) и се използва винаги, когато в последователността има оператори със същия приоритет без скоби.
Символ на оператора. не влияеприоритет, така че, например, ако искате да дефинирате своя собствена версия на умножение, която има същия приоритет и асоциативност като обикновеното умножение, можете да създадете оператори като .*.
За таблица, която изброява приоритета на всички оператори в езика F#, вижте Справочник за символи и оператори (F#).
Имена на претоварени оператори
Когато F# компилаторът компилира израз с оператор, той генерира метод с генерирано от компилатора име за този оператор. Това име се появява в текста на MSIL за метода, както и в отражението и в IntelliSense. Обикновено не е необходимо да използвате тези имена в F# код.
Следната таблица изброява стандартните оператори и съответните им генерирани имена.