native: Не работают делегаты
Опишите ошибку В режиме native не работают делегаты
Воспроизведение ошибки
- Запустить код:
#native ТекстКласса = "#native | |Процедура Тест(Парам, Парам2) Экспорт | Сообщить(Парам + Парам2); |КонецПроцедуры"; ЗаписьТекста = Новый ЗаписьТекста("Класс.os"); ЗаписьТекста.Записать(ТекстКласса); ЗаписьТекста.Закрыть(); ПодключитьСценарий("Класс.os", "Класс"); Класс = Новый Класс(); Делегат = Новый Действие(Класс, "Тест"); Делегат.Выполнить(1, 2); - Увидеть ошибку:
$ oscript entrypoint.os {Модуль entrypoint.os / Ошибка в строке: 20,18 / {Модуль entrypoint.os / Ошибка в строке: 20,18 / Метод Выполнить не определен для типа OneScript.StandardLibrary.DelegateAction} Делегат.Выполнить(1, 2);}
Ожидаемое поведение Должна вывести 3
Окружение
- ОС: Win11
- Версия: 2.0.0.567-rc7-29039316
Дополнительная информация
А это когда-либо работало в native ранее?
А это когда-либо работало в native ранее?
Не уверен, я тут решил поэкспериментировать с тем чтобы лямбды сделать нативными, ну и собственноно репорчу то что не работает.)
Реализация класса DelegateAction не объявляет методы через ContextMethod а реализует их через интерфейс IRuntimeContextInstance т.к. сигнатура метода Выполнить - плавающая и зависит от собственно, делегируемого метода.
Поэтому нативный компилятор не видит метод Выполнить.