Skip to content
Использование делегатов/функторов в скриптах OneScript
1C Enterprise
Branch: master
Clone or download
Pull request Compare This branch is even with artbear:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode
src
tasks
tests
.gitignore
Jenkinsfile
LICENSE.md
README.md
lib.config
packagedef

README.md

Делегаты

Обсудить Join the chat at https://gitter.im/EvilBeaver/oscript-library GitHub release Build Status

Библиотека предназначена для создания и выполнения делегатов/функторов.

Делегат представляет собой объект, который может ссылаться на метод другого объекта.

Например, можно выполнять функции-коллбэки или унифицированно выполнять методы у схожих объектов.

Также можно использовать для замены "некрасивых" и многословных объектов 1С - ОписаниеОповещения, которые имеют мало смысла в мире OneScript.

Использование

Обработчик-процедура

// Подключение библиотеки
#Использовать Делегат

// Метод, вызываемый из делегата
Процедура Поздороваться(Имя) Экспорт
    Сообщить("Привет, " + Имя + "!");
КонецПроцедуры

Делегат = Делегаты.Создать(ЭтотОбъект, "Поздороваться", "Мир");

Делегаты.Исполнить(Делегат); // или Делегат.Исполнить();

ДелегатНовыйМир = Делегаты.Создать(ЭтотОбъект, "Поздороваться");

ДелегатНовыйМир.Исполнить("Новый мир"); // или Делегаты.Исполнить(ДелегатНовыйМир, "Новый мир");

Обработчик-функция

// Подключение библиотеки
#Использовать Делегат

// Метод, вызываемый из делегата
Функция Поздороваться(Имя) Экспорт
    Сообщить("Привет, " + Имя + "!");
    Возврат Имя;
КонецФункции

Делегат = Делегаты.Создать(ЭтотОбъект, "Поздороваться", "Мир");

ИмяМир = Делегаты.Исполнить(Делегат); // или Делегат.Исполнить();

ДелегатНовыйМир = Делегаты.Создать(ЭтотОбъект, "Поздороваться");

ИмяНовыйМир = ДелегатНовыйМир.Исполнить("Новый мир"); // или Делегаты.Исполнить(ДелегатНовыйМир, "Новый мир");

Передача нескольких параметров

#Использовать Делегат

Процедура МетодСТремиПараметрами(Парам1, Парам2, Парам3) Экспорт
	Журнал  = СтрШаблон("%1%2, %3, %4!", Журнал, Парам1, Парам2, Парам3);
КонецПроцедуры

Делегат = Делегаты.Создать(ЭтотОбъект, "МетодСТремиПараметрами");

Массив = Делегаты.МассивПараметров(1, "Два", "Десять");

Делегат.Исполнить(Массив);

или можно указать параметры при создании Делегата

#Использовать Делегат

Процедура МетодСТремиПараметрами(Парам1, Парам2, Парам3) Экспорт
	Сообщить(СтрШаблон("%1, %2, %3!", Парам1, Парам2, Парам3));
КонецПроцедуры

Массив = Делегаты.МассивПараметров(1, "Два", "Десять");

Делегат = Делегаты.Создать(ЭтотОбъект, "МетодСТремиПараметрами", Массив);

Делегат.Исполнить();
You can’t perform that action at this time.