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