====== fail ======
fail erklärt einen Funktionscall als fehlgeschlagen.
doSomething( a is int ) :=
{
if( a == 0 ) fail InvalidNumber;
}
Im Falle einer zwangsläufigen Rückgabevariablen (out) wäre diese aber noch nicht belegt.
doSomething( a is int, b is int out ) :=
{
body
{
if( a == 0 ) fail InvalidNumber;
/* Algorithm */
succeed; //optional
}
on fail( value )
{
b = 0;
log "failed with "+value\.fullName(); // value ist ein Objekt vom Typ global.doSomething.InvalidNumber (void) und heißt (full) global.doSomething.InvalidNumber
}
on succeed
{
log "succeed: " + this\.fullname(); //this is global.doSomething(int, int out)
}
on return
{
log "wird nach fail und succeed ausgeführt";
}
pre
{
log "Funktion wird mit a={a} und b={b} aufgerufen";
}
post
{
log "Funktion wird jetzt verlassen";
}
}
In dem Fall wird erst b auf 0 gesetzt, anschließend wird InvalidNumber an die rufende Funktion übergeben.