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