Relicta-Team / ReNodes

Node editor sources for ReSDK_A3
https://sdk.relicta.ru
MIT License
1 stars 0 forks source link

Lambda nodes #77

Open Yobas opened 9 months ago

Yobas commented 9 months ago

для определения лямбд нужна сигнатура: function[RESERVED=RET_TYPE=PARAMS] RET_TYPE: anytype/container PARAMS: anytype/container with delimeter @

Примеры: function[anon=int=bool@string@float@GameObject^] - анонимная функция с возвращаемым значением int и 4 параметрами function[anon=string=array(int)@enum.TestEnum] - анонимная функция с возвращаемым значением string и 2 параметрами: array[int], enum.TestEnum function[anon=null=dict(string@float)@array(function_ref)] - анонимная функция без возвращаемого значения и с 2 параметрами: dict[string,float], function_ref function[anon=null] - функция без параметров и без возврата значения

Типы функций

Для гибкого распределения принадлежности функций в начале сигнатуры указывается тип функции. Для примера типы функций могут быть следующие:

Передача объекта и определение типа

Функции типа: obj, event, eventlist имеют в себе ссылку на вызывающий объект. Нужно просто менять тип объекта с автоматическим обновлением сигнатуры. Варианты обновления типа объекта:

Ссылки на функции и низкоуровневый вызов

Добавляется новый тип: function_ref для передачи функции с любым количеством параметров и возвращаемым значением. Для доступа и вызова анонимных ссылочных функций (полученных как function_ref) добавляются новые узлы:

Примечание: все низкоуровневые узлы лежат в директории Система.Низкоуровневые.Функции

Yobas commented 9 months ago

Логика лямбд (создание, подключение) готово. Теперь нужно настроить кодогенерацию для них

Yobas commented 9 months ago

Генератор готов

Yobas commented 9 months ago

Осталось:

Yobas commented 8 months ago

Реализовано

Yobas commented 8 months ago

Забыл... В объектных функциях (делегатах) не передается контекст. Впринципе пока нигде нет мест, где такие штуки могли бы пригодится, но доделать всё же стоит.