Обсудить 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, "Два", "Десять"); Делегат = Делегаты.Создать(ЭтотОбъект, "МетодСТремяПараметрами", Массив); Делегат.Исполнить();