2016-10-14 14 views
1

The documentationは、OR論理演算子を短絡すべきであることを示しています、あなたが発生する可能性が最も低いに発生する可能性が高いからそれらを発生する確率がわかっている場合HPCC-ECL論理演算子 - ORが短絡しないのはなぜですか?

、 を注文する必要があります一度任意の理由化合物 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のためにバグを調達しています
関連する問題