====== #-Operator, Pointer und validate ======
Der Value-Operator liefert eine Referenz auf den Speicher, auf den der Pointer zeigt. Das ist die Standardimplementation für einen Pointer-Typ.
d is 3,1415;
dp is ptr(d); // => double ptr; - dp ist gesetzt
dp# : 4711.; //ok, da dp garantiert gesetzt ist.
funcClear is code( dp is double ptr var ) // ptr is variabel
{
dp = null;
};
funcPrint is code( dp is double ptr ) // double ist nicht variabel
{
valdate dp;
print dp#$;
};
funcPrint is code( d is double ) // double ist nicht variabel
{
print d$;
};
func is code( dp is double ptr )
{
// dp ist eventuell null;
dp# : 4711.;
validate dp
{
dp# : 4711; // ok
funcPrint( dp ); // ok, ptr ist nicht variable
funcPrint( dp# ); // ok, dp is validated
funcClear( dp ); // ok, aber...
// --- ab hier kann dp nicht mehr als validate garantiert werden
funcPrint( dp ); // ok, es wird ein Pointer übergeben, damit muss funcPrint klarkommen.
funcPrint( dp# ); // nicht ok, denn wir können dp nicht mehr garantieren. -> error
}
else
{
print "dp ist kein gültiger Pointer";
}
}