Manfred hat geschrieben:könnte mir jemand kurz erklären ...
Code: Alles auswählen
oXbp:validate := {|o| IsIndexUnique( 1, Padl(Trim(o:editBuffer()),6) ) }
Dieses "o" zwischen den Trennzeichen ist ein übergebenes Objekt. Ist es das oXbp ?
Hallo Manfred,
ich versuche mich kurz zu halten ... also immer zuerst in der Doku nachsehen, was für Parameter von der METHODE zurückgegeben werden. Diese Parameter müssen dann zwischen | parameterliste | eingeschlossen werden:
Du fütterst hier die Instanzvariabel :validate ..., der hier angegebene Codeblock wird von der METHODE :validate() aufgerufen, um die Validierung vorzunehmen. In der Doku steht:
Die Methode :validate() dient der Validierung der aktuellen Daten im Editierpuffer eines Xbase-Parts. Dazu muß in der Instanzvariable :validate ein Validierungscodeblock eingetragen sein. Diesem wird self übergeben.
Es wird also als Parameter das Xbp übergeben (in einer lokalen Variablen -> hier O ), welches die Aktion ausgeführt hat. Die Dokumentation nennt es SELF, das ist aber unglücklich ! Denn in dem Moment wo die Instanzvariable gefüttert wird (INIT etc.) bezeichnet SELF oder :: ja die komplette Fensterklasse !
Zur Laufzeit wird aber dem Codeblock das SELF des XbaseParts also oXbp in deinem Beispiel übergeben.
Würde man so schreiben:
{|self| self:... } wären beide self NICHT das FENSTER-SELF, sondern die lokale Variable, welche den ersten Parameter übernimmt.
Die Anzahl der Parameter ist nicht festgelegt, so wird häufig
{|nNil, nNil, oXbp| ... } verwendet, wobei der 3. Parameter das Objekt ist, welches diesen Codeblock aufgerufen hat, und die beiden ersten Parameter unterschiedlich z.B. Keyboard-Wert belegt sind.
Immer in der Doku nachsehen um die übergebenen Parameter zu erkennen.
Leider ist die nicht immer gut zu verstehen.