Sunn
To feel joy, not be blue
offline
Опыт:
4,975Активность: |
Прошу откоментить данные строки из vJass мануала, которые касаются удалению более ненужных структур:
..а также использование тригера тоже не очень хорошо скажется быстродействии алгоритма, что говорит против использования onDestroy method... Тоесть использовать method onDestroy не есть хорошо? Если так, то какая альтернатива? новый вопрос - новая тема. © swdn Отредактировано ShadoW DaemoN, 01.01.2009 в 12:11. |
30.12.2008, 20:44 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Xenosapien, вообще методы структур вызываются не совсем обычным способом - не через прямой вызов метода вроде call StructA__DoSomething(), а через дополнительную функцию, которая запускает триггер. Чтобы было понятней, приведу код:
Код:
Вот как пример выглядит в редакторе. А вот как этот же код будет выглядеть в файле war3map.j: Код:
|
01.01.2009, 12:28 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
свдн не прально выразился, не все методы структур вызываются через триггер, только перегрузки
я бы не рекомендовал использовать он дестрой, да и вообще любые перегрузки методов создания удаление и прочее, просто создай свой метод в котором удаляеш структуру или созадеш, без перегрезуки, тогда никакого триггера не будет J добавил: перегрузки методов создания и удаление сделаны через триггер чтобы были доступны из любой части кода, естестено если будеш делать обычными методами, то прийдется использоватся только ниже, но это не большой минус, все уже привычное... Отредактировано J, 01.01.2009 в 14:04. |
01.01.2009, 14:06 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sunn
To feel joy, not be blue
offline
Опыт:
4,975Активность: |
A что делает
Код:
Функция возвращает булево а это нигде не используется%] Тоесть, function sc__omg_destroy сообщает варику, что освободилось место для еще одного представителя структуры, а собственно обнуление ее переменных совершает sa__omg_onDestroy? Xenosapien добавил: Цитата:
Ну свой конструктор это насколько я понял что-то типа этого: Код:
Хотя нет, я всеравно использую дефолтный метод create()... Вобще, структура с ее методами это некая оболочка которая упрощает использование глобальных массивов, коими являются все не-статик переменные структуры. Соответственно, вЖасс имеет свои методы работы с этими массивами.... это я к тому что "просто создай свой метод" означает изменить то как вар обрабатывает структуры? Ведь когда я пишу какойто метод, я не могу указать как именно вар должен его обрабатывать, я лишь говорю ему что он должен делать. |
|
01.01.2009, 15:07 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Цитата:
Все, абсолютно: и перегрузки, и статические, и обычные. Проверь сам. Честно говоря, использование самописных перегруженных методов create и onDestroy не кажется мне полной фигней. Эти методы вызываются в единичных экземплярах, в отличие от часто используемых методов. К примеру, у нас есть структура pos (некий аналог location), и в ней методы Set (устанавливает координаты для точки) и Get (получает координаты точки). И есть спелл, в периодической части которого производится вызов этих методов. Вызов этих методов идет через доп. функцию, которая, в свою очередь, забивает в глобалки переданные для метода параметры (если таковые имеются) и запускает триггер. Это, конечно, не может не отразиться на быстродействии. Xenosapien, TriggerEvaluate проверяет условие (condition) триггера, и возвращает true, если условие истинно, и false, если ложно. sc__omg_destroy - функция, которая удаляет запись о данной структуре (по алгоритму freeslot). sa__omg_onDestroy - функция, содержащая действия, которые необходимо выполнить при удалении записи о структуре. Отредактировано ShadoW DaemoN, 01.01.2009 в 15:29. |
|
01.01.2009, 15:21 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
Цитата:
J добавил: Цитата:
Цитата:
Отредактировано J, 01.01.2009 в 16:30. |
|||
01.01.2009, 15:42 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Jon, между прочим, я не сообщаю информацию, которую сам не проверял. Или мне запостить сюда код и компиляцию джассхелпера в качестве доказательства, что все самописные методы вызываются через триггеры, если ты не веришь? Хмм, хотя можешь посмотреть вышеуказанный код, там есть статический метод в структуре.
Насчет проигрыша в производительности: ты наверняка знаешь, что вызов функции через триггер + TriggerEvaluate/TriggerExecute в несколько раз медленнее, чем прямой вызов (через call). |
01.01.2009, 15:44 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
Цитата:
Цитата:
P.S. посмотрел вДжаз Мануал... там все правельно написано... с чего ты вообще взял что все методы вызываются через триггеры? » Цитата из vJass мануала Ааа! я наверно знаю почему... ты наверно смотрел методы структур наследуемых от интерфейса - все они вызываются через триггеры, это дает одинаковую скорость выполнения при любом количестве наследуемых структур, а также независимость от начинки методов в разных структурах одного интерфейсаДостаточна простая в понимание конструкция, на vJass выглядит так: Код:
Код:
В случае же обычных сруктур это просто бесмыслено Отредактировано J, 01.01.2009 в 16:24. |
||
01.01.2009, 15:51 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Так... я вроде разобрался =)
Я тестировал структуры в действии в библиотеках (library) и областях (scope).
В первом случае все методы вызываются через запуск триггера, во втором случае - через стандартный вызов (call) - и даже onDestroy, несмотря на то, что триггер для этого метода все равно создается.
Дело в том, что описание библиотек физически находятся раньше в war3map.j, чем описание структур, поэтому приходится пользоваться функциями-посредниками.
Надеюсь, я прояснил ситуацию. Отредактировано ShadoW DaemoN, 01.01.2009 в 18:58. |
01.01.2009, 18:34 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Цитата:
в данном случае несовсем, онДестрой идет через тригер для поддержки полиморфизма как я понимаю Цитата:
ага, обычные методы зовуться через калл, если векс в последней версии ничего не напортачил, а то он такой, он может... вобщем хз, всеравно я юзаю просто массивы, аллко/дестрой делаю через макросы и неимею никаких проблем |
||
07.01.2009, 13:18 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|