0x04c ASSERTION_ERROR

アサーションが失敗しました


taiseiue | 2024-11-21

事前に関数のシグネチャやその他の場所で表明されていた条件が、今回の呼び出しで満たされませんでした。 プログラムの間違いがないか確認してください。

この例外は、以下のような状況で発生します。

ケース1 関数が表明した事前条件を満たさずに呼び出した

この例外は、関数が表明した事前条件を満たさないような関数呼び出しを行ったときに発生します。 通常、これは関数の呼び出し元のコードに問題がある可能性があります。 次の例を参照してください。

AliceScript
using Alice.Math;

// x >= 0の範囲では定義されない
number F(number x) requires(x < 0)
{
    return math_sqrt(math_abs(x));
}

print(F(-4)); //出力 : 2
print(F(4));  //これはエラー
// 0x04c この呼び出しは、関数が表明した事前条件を満たしませんでした

ケース2 関数が表明した事後条件を満たさなかった

この例外は、関数が表明した事後条件を満たさなかったときに発生します。 通常、これは関数の実装のコードに問題がある可能性があります。 次の例を参照してください。

AliceScript
number Abs(number x) ensures(return >= 0)
{
    // 本来はx >= 0とx < 0で処理を分ける必要がある
    return x;
}

print(Abs(4));  //出力 : 4
print(Abs(-4)); //これはエラー
// 0x04c この関数は、関数が表明した事後条件を満たしませんでした

ケース3 任意の場所で表明した条件を満たさなかった

この例外は、assertassert_equal関数が任意の場所で表明した条件を満たさなかったときに発生します。 次の例を参照してください。

AliceScript
using Alice.Diagnostics;

var x = 1;

assert(x == 0);   //x == 0を満たさないためエラー

assertEqual(x,0); //これも同じ意味