2.32 :recall()
Diese Methode kann beliebige, vordefinierte und benutzerdefinierte Methoden aufrufen. Dies ist z.B. dann notwendig, wenn die Methode, die aufgerufen werden soll, selbst berechnet wird oder in einer Variablen gespeichert ist.
Der Aufruf der Methode :recall() ruft indirekt die angegebene Methode auf und liefert als Rückgabewert den Rückgabewert der aufgerufenen Methode zurück. Die Anzahl der Parameter die bei der Verwendung von :recall() mit übergeben werden können, ist jedoch auf maximal 15 beschränkt. Darauf ist beim Entwurf von eigenen Methoden zu achten.
Definition
anyvalue :recall
(
method Method input
{ , anyvalue Par1 input }
...
{ , anyvalue Par15 input }
)
Parameter
- method Method input
- In diesem Parameter wird die aufzurufende Methode übergeben.
- anyvalue Par1 input
…
anyvalue Par15 input - In diesen Parametern werden die Parameter der aufzurufenden Methode übergeben. Die angegebenen Parameter müssen in Anzahl und Datentypen den Parametern der aufzurufenden Methode entsprechen.
Rückgabewert
Rückgabewert der aufzurufenden Methode.
Erzwingen des rekursiven Aufrufs anderer Methoden
Die Methode :recall() kann dazu benutzt werden, einen rekursiven Aufruf anderer Methoden zu erzwingen, z.B. von :get() und :set(). Dies unterscheidet sie von der Methode :call().
Beispiel
dialog RECALL
record Rec
{
integer Progress := 0;
integer Max := 100;
:set() {
case (Attribute)
in .Progress:
if Value < 0 then
Value := 0;
else
if Value > this.Max then
Value := this.Max;
endif
endif
this:super();
in .Max:
this:super();
if this.Max<this.Progress then
// Die Konsistenzpruefung fuer .Progress soll noch einmal
// durchgefuehrt werden. Dazu wird :set() rekursiv aufgerufen.
this:recall(:set, .Progress, this.Max, false);
endif
endcase
}
}
on dialog start
{
Rec.Progress := 90; // Soll .Progress = 90.
Rec.Max := 50; // .Progress muss mit angepasst werden .
// Soll .Progress = 50, .Max = 50.
}
Siehe auch
Method