SET UDFPARMS-Befehl
Gibt an, ob Microsoft Visual FoxPro Parameter als Wert oder als Verweis an eine benutzerdefinierte Funktion (UDF) übergibt.
SET UDFPARMS TO VALUE | REFERENCE
Parameter
- TO VALUE
Gibt an, dass eine Variable als Wert an eine benutzerdefinierte Funktion übergeben wird. In diesem Fall kann der Wert der Variablen in der benutzerdefinierten Funktion geändert werden. Der ursprüngliche Wert der Variablen im aufrufenden Programm wird jedoch nicht geändert. - TO REFERENCE
Gibt an, dass eine Variable als Verweis an eine benutzerdefinierte Funktion übergeben wird. Wird der Wert der Variablen nach der Übergabe der Variablen als Verweis von der benutzerdefinierten Funktion geändert, wird auch der ursprüngliche Wert der Variablen im aufrufenden Programm geändert.
Hinweise
Standardmäßig werden Variablen als Wert an eine benutzerdefinierte Funktion übergeben. (Variablen, die an Prozeduren mit DO ... WITH übergeben werden, werden als Verweis übergeben.)
Sie können die Übergabe von Parametern als Wert oder als Verweis an UDFs unabhängig von der SET UDFPARMS-Einstellung erzwingen. Um die Variable zwingend als Wert zu übergeben, setzen Sie sie in runde Klammern. Stellen Sie der Variablen das @-Symbol voran, um die Übergabe als Verweis zu erzwingen.
Tipp Sie können ganze Arrays an eine Prozedur oder benutzerdefinierte Funktion übergeben. Das gesamte Array wird übergeben, wenn Sie SET UDFPARMS TO REFERENCE eingeben oder dem Arraynamen ein @ voranstellen. Das erste Element des Arrays wird als Wert übergeben, wenn Sie SET UDFPARMS TO VALUE eingeben oder den Arraynamen in runde Klammern setzen. Arrayelemente werden immer als Wert übergeben.
Beispiel
Das folgende Beispiel verdeutlicht den Unterschied zwischen der Übergabe einer Variablen als Wert und als Verweis.
** Pass variable by value ** CLEAR SET TALK OFF WAIT 'Press a key to pass by value' WINDOW SET UDFPARMS TO VALUE STORE 1 TO gnX
** The value of gnX is unchanged ** @ 2,2 SAY 'UDF value: ' + STR(plusone(gnX)) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)
** Pass variable by reference ** WAIT 'Press a key to pass by reference' WINDOW CLEAR SET UDFPARMS TO REFERENCE STORE 1 TO gnX ** The value of gnX is changed ** @ 2,2 SAY 'UDF value: ' + STR(plusone(gnX)) @ 4,2 SAY 'Value of X: ' + STR(gnX) SET UDFPARMS TO VALUE
** This is a UDF that adds one to a number ** FUNCTION plusone PARAMETER gnZ gnZ = gnZ + 1 RETURN gnZ ** End of UDF **
Es folgt das gleiche Beispiel wie oben mit dem Unterschied, dass nun durch Verwendung von runden Klammern und des @-Symbols Variablen als Wert bzw. als Verweis übergeben werden:
** Pass variable by value ** CLEAR SET TALK OFF WAIT 'Press a key to pass by value' WINDOW STORE 1 TO gnX @ 2,2 SAY 'UDF value: ' + STR(plusone((gnX))) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)
** Pass variable by reference ** WAIT 'Press a key to pass by reference' WINDOW CLEAR STORE 1 TO gnX @ 2,2 SAY 'UDF value: ' + STR(plusone(@gnX)) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)
** This is a UDF that adds one to a number ** FUNCTION plusone PARAMETER gnZ gnZ = gnZ + 1 RETURN gnZ ** End of UDF **
Siehe auch
DO | LPARAMETERS | PARAMETERS | PARAMETERS( ) | PROCEDURE