2016-10-14 5 views
1

The documentation означает, что ИЛИ логический оператор должен короткого замыкания:Логические операторы HPCC-ECL. Почему OR или короткое замыкание?

Если вероятность появления известно, вы должны заказать их, скорее всего, произойдет в наименее вероятен, так как раз любой часть составного или условие имеет значение TRUE, остальная часть выражения пропускается

Если я не ошибаюсь, это не ведет себя, как и ожидалось. Когда он должен оценить выражение, возвращающее TRUE, кажется, продолжает оценивать следующее выражение после OR. Похоже, что для жестко заданного значения TRUE он работает так, как ожидалось.

Я делаю что-то неправильно или неправильно понимаю код/​​документацию?

Рассмотрим следующий код:

IMPORT STD; 
superFileName := 'temp::superFile'; 
fileName  := 'temp::regularFile'; 
returnsTrue  := ~STD.File.FileExists(fileName, TRUE); // File does not exist, so will return true as expression is negated 
getSubCount  := NOTHOR(STD.File.GetSuperFileSubCount(superFileName)) > 0; // "Could not locate superfile: thor::nonExistent" 

deleteFile  := STD.File.DeleteLogicalFile(fileName); 
deleteSuperFile := STD.File.DeleteSuperFile(superFileName); 

SEQUENTIAL(
    deleteFile, 
    deleteSuperFile, 
    OUTPUT(returnsTrue), // true 
    OUTPUT(IF ((TRUE OR getSubCount), 'true', 'false')), // 'true' 
    OUTPUT(IF ((returnsTrue OR getSubCount), 'true', 'false')), // "Could not locate superfile: thor::temp::superFile" 
); 

ответ

1

Ответ предоставляется на HPCC теме форума here указывает, что это известная проблема:

В этом случае ваше определение getSubCount это действие, и компилятор, выполняющий все действия в состоянии, является известной проблемой.

Я поднял ошибку на этой here, однако я предполагаю, что ответ на этот вопрос в настоящее время «он должен короткого замыкания, но это не»