Der FoxPro-Kompatible Skriptinterpreter
🔎
Newsletter
Der FoxPro-Kompatible Skriptinterpreter

with

Mit der WITH-Anweisung kann die Leistung des Programmes verbessert werden, falls mehrfach hintereinander auf ineinander verschachtelte Objekte zugegriffen werden muss.

WITH <Object>
  <...UserStatementList>
ENDWITH

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
* Verwende die WITH-Anweisung mehrfach
* hintereinander auf Eigenschaften des Objektes address
* innerhalb der Person zuzugreifen.
LOCAL personObject
personObject = createobject("PersonClass")

* Eigenschaften schreiben
WITH personObject.address
  .street = "SomeStreet 1"
  .zipCode = "12345"
ENDWITH

* Eigenschaften lesen
WITH personObject.address
  ? .street
  ? .zipCode
ENDWITH

DEFINE CLASS PersonClass AS Custom
  FUNCTION Init
    THIS.address= createobject("AddressClass")
  ENDFUNC
  address = .null.
ENDDEFINE

DEFINE CLASS AddressClass AS Custom
  street = ""
  zipCode = ""
ENDDEFINE

SomeStreet 1
12345

Kompatiblität mit FoxPro

Das WITH...ENDWITH-Konstrukt funktioniert in DO anders als in FoxPro und ist nicht vollständig kompatibel. So ist es in FoxPro so, dass auch in Unterfunktionsaufrufen noch relative Pfade ".someprop" verwendet werden können. In DO sind diese Referenzen allerdings nur in dem Stapelrahmen gültig in dem sich auch das WITH...ENDWITH-Konstrukt befindet.

Der folgende Code funktioniert in FoxPro, führt allerdings in DO zum einem Kompilerfehler.

  1
  2
  3
  4
  5
  6
  7
  8
  9
LOCAL o
= createobject("Custom")
WITH o
  someFunction()
ENDWITH

FUNCTION someFunction
  .Tag = "HelloWorld"
ENDFUNC

(Compiler error) 1940 - Expression is not valid outside of WITH/ENDWITH.
 in /runtime/builddir/runme.prg, line 8, column 3, somewhere at: .Tag

Expression is not valid outside of WITH/ENDWITH.