про boolexpr, filterfunc...

Почему здесь будет выдана ошибка, что функция abc() должна возвращать boolean...

function abc takes nothing returns nothing
endfunction

function zxc takes nothing returns nothing
	local filterfunc filter = Filter(function abc)
endfunction

... а здесь такая ошибка не будет выдана?

function abc takes nothing returns nothing
endfunction

function zxc takes code c returns nothing
	local filterfunc filter = Filter(c)
endfunction

function asd takes nothing returns nothing
	call zxc(function abc)
endfunction

Без ответа.


Просмотров: 150

quq_CCCP #1 - 2 месяца назад 1
ну будет фатал, боллекспры требуют возврать логического значения, а так же передают аргумент в GetFilterUnit\item и так далее, на то они и фильтры.
ScopteRectuS #2 - 2 месяца назад 0
quq_CCCP, у меня фатала нет! все работает, словно там все верно написано.
quq_CCCP #3 - 2 месяца назад 1
Там ты возвращяешь сам боллексп, но у тебя в нем нет кода, он не выполняется, не будет завершение потока, движок должен будет обрубить поток или фатальнуть.
Похоже на ошибку пасера, который проверяет синтаксис, таких ошибок там вероятно еще полно, на подобных ошибках основана работа Return Bug и так далее.
KingMaximax #4 - 2 месяца назад (отредактировано ) 0
code тип принимающий только наименовании функция через ключ function;
ей не требуется знать возвращает ли функция булево или нет. Она тупо отсылку к функции поставляет. Проще говоря он передаёт ссылку на функцию.
Однако для фильтра(условия(condition)) нужна только функция с логическим типом, ведь он проверяет допускать ли предмет или боевую единицу для перечня или согласованна ли она для выполнения триггера по событию, которое содержит данный фильтр.
По сути тупо ей нужен логический тип для подтверждения дальнейший действий.
Поэтому лучше не извращаться с этим, если вы не применяете для каких либо значимых целей. А для исполнения действий нужна чисто без параметров и чтобы не возвращала ничего, например для TimerStart, TriggerAddAction
И как сказал quq_CCCP, такая ваша конструкция может сделать ошибку или прервать поток.
И да это ошибка уже парсера(как сказал quq_CCCP~~) самого JASS. Т.к. те проверяются из-за того, что те функции служебные, а ваша простая.
Лучше сделайте так:
function abc takes nothing returns boolean
	return not IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) // к примеру или другой ваш пример...
endfunction