Решил полазить в старых мапках, с целью воскресить одну из них.
Наткнулся на странный код, например:
function CS_H2I takes handle h returns integer
return h
return 0
endfunction
Двойной ретурн выглядит прикольно, но он уже немного ломает мне мозг.
Ну или вот такое:
function GetAttachedObject takes handle h,string label returns handle
return GetAttachedInt(h,label)
return null
endfunction

function GameCache2Trigger takes gamecache g returns trigger
return g
return null
endfunction

function H2I takes handle h returns integer
return h
return 0
endfunction

function I2U takes integer i returns unit
return i
return null
endfunction

function I2T takes integer t returns trigger
return t
return null
endfunction

function I2G takes integer g returns group
return g
return null
endfunction
Можете помочь, как это можно переделать в "работоспособный" для текущего вара вариант?
Просто понятия не имею как это могло раньше работать :/
Взято из офф карты moomoo 1.5 с эпиквара.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
26
5 лет назад
2
Принятый ответ
0
17
5 лет назад
0
Hate, т.е. это почти то же самое что и текущий GetHandleId ?
2
28
5 лет назад
2
Да.
0
27
5 лет назад
Отредактирован MpW
0
в переменной не может быть ничего не записано. пример с целым числом либо вернет число. Если там ничего нет, то вернет 0. представь если пробовал манипулировать с несуществующим, то чего нет (крит игры если это объект). если return h ничего не может вернут, пробует return 0.
а так тебе сразу говорят 0 или null. единственная непонятная херня - это с конвертом, никак не могу понять как целое число заделывается в юнита. это получается хэндл возвращает?
0
30
5 лет назад
0
Steal nerves, ссылку дали выше, читай.
PyCCKuu_4eJl:
Hate, т.е. это почти то же самое что и текущий GetHandleId ?
С точки зрения применения - да, по факту - абсолютно нет.
0
28
5 лет назад
Отредактирован PT153
0
единственная непонятная херня - это с конвертом, никак не могу понять как целое число заделывается в юнита. это получается хэндл возвращает?
Что не понятно, любой тип в WC3 состоит из 32 битов, если это хендл, строка или функция, то в качестве значения в этих 32х битах находится ссылка на объект, строку или функцию соответственно. Если это логическая или число, то 32 бита содержат значение. Данные функции просто делают тайпкаст, чтобы можно было без проблем использовать переменную типа integer как ссылку на объект.

Сейчас ретур баг всё ещё есть, но в другом виде, и называется return-loop hack, на HIVE почитайте. Я с помощью его нашёл баг обработки численно записанных real в JASS.

Точно также я делаю все свои фильтры, они возвращают nothing (хотя по идее должны возвращать boolean). Если функция возвращает nothing, то она возвращает 32 нуля, что есть false. Можно вместо nothing возвращать real или integer, если возвращаемое значение будет 0, то это будет false, иначе true.

Сам vJass генерирует действия для триггеров, которые возвращают true, хотя действия, по идее, должны возвращать nothing.
4
32
5 лет назад
4
Все ретурн баг функции на хештаблицу меняешь и все прекрасно работает.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.