Алгоритмы, Наработки и Способности
Способ реализации:
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.
Список поддерживаемых типов данных
Возможно расширить в любой момент по аналогии.
(string)
(destructable)
(effect)
(integer)
(item)
(lightning)
(multiboard)
(multiboarditem)
(player)
(real)
(rect)
(region)
(timer)
(trigger)
(unit)
Список изменений (02.01.2020)
  • Добавлено введение, описание, дополнительно, установка;
  • Добавлен деструктор. Теперь можно очистить объект-функцию;
  • Исправлена очистка функций, добавлен возврат нескольких значений;
  • Единый деструктор для всех функций. Переход к ExecuteFunc() от ForceEnumPlayers() из-за мультивызовов.

Скопировать папки ProtoClass, SaveFunction.
Скачать:
SaveFunction.w3m
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
29
4 года назад
Отредактирован Doc
0
Vlod:
Обращаюсь к аудитории. Посмотрите на этот комментарий, а теперь - на версию патча.
Логики я здесь, извините, не вижу.

Для тех, кто не понял, на 1.26 нет луа.
Для тех, кто не понял, 1.26 - не последний патч. (соответственно делать на нем что-либо здравого смысла нет, патчу почти 9 лет)
0
17
4 года назад
0
Что касается обсуждения самого lua тут. Хочу заметить, что на момент задания мной вопроса и получения на него ответа не было такой программы, следовательно не была обновлена эта статья. Также не было и этой и этой статьи и этого заказа. Появление такого обилия ресурсов, а также планомерное увеличение спроса свидетельствует, что предоставленных материалов в ответах было объективно недостаточно.
0
29
4 года назад
0
Объективно недостаточно для чего? С луа можно было нормально работать в день выхода 1.30
2 комментария удалено
0
26
4 года назад
0
конвертер жасс->луа был довольно давно, другой,
в этом смысола действительно особо нет, так как на 1.26 оставаться с приближением рефорджа уже не имеет резона
Настроить intellij под луа и варкрафт банально для копирования кода в редактор дело нескольких минут и было уже расписано как
это типа прикольно и все дела только слишком поздно
0
28
4 года назад
Отредактирован PT153
0
Да при чём тут Lua, наработка на cJass, пишите про качество самой наработки с точки зрения JASS.
Vlod, ресурс можно скрыть.
0
29
4 года назад
0
Пишу о качестве наработки: "A closure is a poor man’s object; an object is a poor man’s closure". Учитывая что эти кложуры нужно оборачивать в макросы, которые при изменении сигнатуры функции нужно еще и поддерживать, куда-то сохранять, а затем еще и удалять, намного проще вручную создать структуру. Не нужно. Речь о луа была только потому, что там тоже есть кложуры, только их использование во много много раз проще и имеет больше смысла (анонимные функции, например). Тащить подобные костыли в жасс не советую.
0
17
4 года назад
Отредактирован Vlod
0
Данная наработка сделана таким образом, чтобы минимизировать изменение уже существующих синтаксических конструкций, позволяет писать чистые функции. Мы добавляем функционал, которого нет. В том числе для того, чтобы писать такие вещи.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.