John Doe wrote: ↑Sat 30 May, 2020 08:10
Aналогично не выйдет, поскольку список аргументов обработчиков событий определён изначально. Добавить в конец как ещё один аргумент - довольно криво, ведь в разных группах даже количество аргументов отличается
Что я думаю об этом
Что надо поставить эту таблицу EventData первой.
Конечно же все АПИ плагинов сломаются, но других проблем я не вижу
(есть ли еще какие проблемы кроме плагиновских АПИ ?)
Теперь как починить сломанные АПИ, есть такие варианты:
1.) Для плагинов написанных на "нормальных" типизированных языках как Си и Паскаль, есть полиморфизм методов (функций).
полиморфизм означает вариативность "сигнатуры" метода (функции) без измения в самом методе (функции)
Т.е., совсем не проблема, поправьте если где ошибаюсь.
Старые плагины работают как раньше, новым рекомендуется использовать новую форму вызова, все счастливы.
2.) Для нетипизированных обращений, как например из плагина LuaMacro.
Тут проблема серьезнее, ведь старый макрос не знает что сейчас первый параметр это уже не то что было раньше.
Но есть такие варианты, для Луа:
2.1.) И/ИЛИ: При инициализации (создании) макроса (в LuaFar/LuaMacro) для функций condition()/action() задается upvalue - таблица названная EventData.
2.2.) И/ИЛИ: Создать "полиморфизм" уже на уровне LuaFar/LuaMacro, как condition2() и action2(), которые и будут принимать (EventData, ...)
Кривовато, но легитимно, и частенько (если не всегда, когда есть всякие legacy) развитие кода именно в таком направлении.
Старые макросы работают, а у новых есть EventData, все счастливы
Причем все предложенные изменения тривиальны, поправьте если ошибаюсь
John Doe wrote: ↑Sat 30 May, 2020 08:10Можно добавить как отдельное поле Event. Но тогда и для макросов стоит переделать аналогично.
Это я не понял, как не старался, наверное что-то упустил, обьясните кому не лень
POST SCRIPTUM
Пояснения к зачеркнутому:
@ShmuZ wrote:Могу только заметить, что оригинальное предложение касается только макросистемы и не влияет на API плагинов (в смысле не ломает).
А и точно ведь, у "нормальных" плагинов (не макро скриптов) ведь такого понятия как condition()/action() вапще нет, и означенной проблемы соответвенно нет, спасибо за замечание