Добавлен Vlod,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
cJass
Тип:
Наработка
Версия Warcraft:
1.26а
Введение
Иногда может понадобиться сохранить определенный список аргументов функции, чтобы потом вызвать её с нужными параметрами.
Описание
- Сохранить аргументы с функцией в объект:
namefunction.save(arg1,arg2...) -> int obj,
где namefunction - имя оригинальной функции,
(arg1,arg2...) - её аргументы.
- Вызвать:
frun(int obj)
- Вернуть значения:
namefunction.namepar1, namefunction.namepar2,
где nameparN - имя возвращаемого параметра
- Удалить (очистить):
fdel(int obj)
---Пример---
function test_1 takes integer a, integer b returns nothing
test_1.ret(a+1,b-1)
endfunction
//! runtextmacro FUNC2("test_1","integer","integer")
//! runtextmacro RET2("test_1","integer","i1","integer","i2")
function test_2 takes integer a, integer b, real c returns nothing
printr(a+c,b+c)
endfunction
//! runtextmacro FUNC3("test_2","integer","integer","real")
function MyCode1 takes nothing returns nothing
integer save = test_1.save(1,5)
frun(save)
fdel(save)
save = test_2.save( test_1.i1, test_1.i2, 10. )
frun(save)
fdel(save)
endfunction
Выведет:
a+c 12.000; b+c 14.000
Дополнительно
о количестве аргументов
Система легко масштабируется, но с увеличением масштаба тяжело вводить архитектурные изменения. Сжать код не получилось из за словленного бага с define.
Установка
Поддерживаются функции не более чем с 6 аргументами.
Число возвращаемых параметров не более 4.
Число возвращаемых параметров не более 4.
Список поддерживаемых типов данных
Возможно расширить в любой момент по аналогии.
(string)
(destructable)
(effect)
(integer)
(item)
(lightning)
(multiboard)
(multiboarditem)
(player)
(real)
(rect)
(region)
(timer)
(trigger)
(unit)
Список изменений (02.01.2020)
- Добавлено введение, описание, дополнительно, установка;
- Добавлен деструктор. Теперь можно очистить объект-функцию;
- Исправлена очистка функций, добавлен возврат нескольких значений;
- Единый деструктор для всех функций. Переход к ExecuteFunc() от ForceEnumPlayers() из-за мультивызовов.
Скопировать папки ProtoClass, SaveFunction.
Скачать:
SaveFunction.w3m
SaveFunction.w3m
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Clamp
Отредактирован Jack-of-shadow
Единственное передача атрибутов там не встроена, для этого используются глобалки. Функции для передачи я расширяю по мере надобности, так как обычно хватает индекса игрока.
А, так у тебя тоже фильтры только не через хеш? Тогда это даже шустрее будет
Сомнительный функционал в рамках варкрафта
Подсветка, запуск, билд, скиньте подробные мануалы, чтобы можно было их сравнить с предыдущими и проверить работоспособность на 1.26 и 1.31.
Или, может, есть парсер cjass -> lua, или хотя бы vjass -> lua?
Ведь большое количество проектов были написаны с использованием этих диалектов, есть ли возможность облегчить им переход?