Ссылки на методы
Значение функционального типа может передаваться с помощью ссылки на метод, которая передает уже существу ющий метод и записывается с помощью символа &
, названия метода и аргументов, например:
&МойМетод
&Выбрать(Массив<Товар>, Число)
Так во встроенном языке может выглядеть ссылка на метод как аргумент при передаче в другой метод:
// 3-й аргумент — ссылка на метод
Скрипт(1, 5, &МойМетод)
Ссылки на метод позволяют передавать в качестве значений функционального типа уже существующие методы. Ссылка на метод может передаваться как переменная, параметр, или возвращаемое значение. Ссылка на метод также может ссылаться на лямбда-выражение, если этому лямбда-выражению было присвоено имя. В общем случае синтаксис ссылки на метод выглядит следующим образом:
&имя-метода[(тип-параметра-1, ..., тип-параметра-N)]
где
&
— символ ссылки на метод;имя-метода
— имя уже существующего метода, на который дается ссылка;(тип-параметра-1, ..., тип-параметра-N)
— список параметров, если они есть.
Так, в примере ниже, метод Скрипт() получает результат метода МойМетод(), в который как аргумент передается ссылка на метод Квадрат(), имеющий тип (Число)->Число
и возводящий число в квадрат:
метод Квадрат(а: Число): Число
возврат а * а
;
метод МойМетод(а: Число, Формула: (Число)->Число): Число
возврат Формула(а)
;
метод Скрипт(а: Число)
пер Результат = МойМетод(а, &Квадрат)
;
Ниже описываются существующие виды ссылок на методы.
Ссылка на локальный метод
Создает ссылку на локальный метод (метод в этом же модуле). Результирующий функциональный тип имеет те же параметры, что и метод, и такой же тип возврата.
Краткий синтаксис:
&имя-метода
Полный синтаксис:
&имя-метода(тип-параметра-1, ..., тип-параметра-N)
Краткая форма может быть использована, если:
- метод не имеет перегрузок,
- функциональный тип может быть выведен из контекста.
Иначе необходимо использовать полную форму.
Примеры:
метод ДлинаСтроки(строка: Строка): Число
возврат строка.Длина()
;
метод тест()
знч Длина1 = &ДлинаСтроки // (Строка)->Число
знч Длина2 = &ДлинаСтро ки(Строка) // (Строка)->Число
;
Ссылка на метод экземпляра
Создает ссылку на метод экземпляра в указанной переменной. Результирующий функциональный тип имеет те же параметры, что и метод, и такой же тип возврата.
Краткий синтаксис:
&имя-переменной.имя-метода
Полный синтаксис:
&имя-переменной.имя-метода(тип-параметра-1, ..., тип-параметра-N)
Кра ткая форма может быть использована, если:
- метод не имеет перегрузок,
- функциональный тип может быть выведен из контекста.
Иначе необходимо использовать полную форму.
Примеры:
метод тестГлобальныйКонтекст()
&ОбщийМодуль1.Метод1(Строка) // (Строка)->Число
;
метод тестЛокальнаяПеременная()
пер Массив1 = <Число>[]
пер добавить = &Массив1.Добавить // (Число)->Булево
добавить(1) // Добавляет в массив
;
Ссылка на метод типа
Создает ссылку на метод типа. Результирующий функциональный тип имеет первым параметром параметр указанного типа, а далее — такие же параметры, что и метод, и такой же тип возврата.
Краткий синтаксис:
&имя-типа.имя-метода
Полный синтаксис:
&имя-типа.имя-метода(тип-параметра-1, ..., тип-параметра-N)
Примеры:
метод тест()
знч Длина1 = &Строка.Длина // (Строка)->Число
знч Длина2 = &Строка.Длина(Строка) // (Строка)->Число
знч Добавить = &Массив<Число>.Добавить // (Массив<Число>, Число)→Булево
;
метод СортироватьСтроки(массив: Массив<Строка>)
массив.Сортировать(&Строка.Сравнить)
;
Ссылка на конструктор
Создает ссылку на конструктор типа. Результирующий функциональный тип имеет те же параметры, что и конструктор, и конструируемый тип как тип возврата.
Краткий синтаксис:
&имя-типа.новый
Полный синтаксис:
&имя-типа.новый(тип-параметра-1, ..., тип-параметра-N)
Примеры:
метод тест()
знч НовыйСтрока1 = &Строка.новый // (Байты)->Строка
знч НовыйСтрока2 = &Строка.новый(Байты) // (Байты)->Строка
;