OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

native: Не работают делегаты

Open sfaqer opened this issue 8 months ago • 3 comments

Опишите ошибку В режиме native не работают делегаты

Воспроизведение ошибки

  1. Запустить код:
    #native
    
    ТекстКласса =
    	"#native
    	|
    	|Процедура Тест(Парам, Парам2) Экспорт
    	|	Сообщить(Парам + Парам2);
    	|КонецПроцедуры";
    
    ЗаписьТекста = Новый ЗаписьТекста("Класс.os");
    ЗаписьТекста.Записать(ТекстКласса);
    ЗаписьТекста.Закрыть();
    
    ПодключитьСценарий("Класс.os", "Класс");
    
    Класс = Новый Класс();
    
    Делегат = Новый Действие(Класс, "Тест");
    
    Делегат.Выполнить(1, 2);
    
  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

Дополнительная информация

sfaqer avatar Apr 10 '25 04:04 sfaqer

А это когда-либо работало в native ранее?

EvilBeaver avatar Apr 10 '25 09:04 EvilBeaver

А это когда-либо работало в native ранее?

Не уверен, я тут решил поэкспериментировать с тем чтобы лямбды сделать нативными, ну и собственноно репорчу то что не работает.)

sfaqer avatar Apr 11 '25 00:04 sfaqer

Реализация класса DelegateAction не объявляет методы через ContextMethod а реализует их через интерфейс IRuntimeContextInstance т.к. сигнатура метода Выполнить - плавающая и зависит от собственно, делегируемого метода.

Поэтому нативный компилятор не видит метод Выполнить.

EvilBeaver avatar May 18 '25 18:05 EvilBeaver