Определяет, как система Visual FoxPro передает параметры в пользовательские функции и прцедуры (UDFs): по-значению или по-ссылке.

SET UDFPARMS TO VALUE | REFERENCE

Параметры

TO VALUE

(По-умолчанию) В качестве параметров передаются значения переменных. В этом случае, в процедуре или в функции параметры могут быть изменены, однако оригинальные значения соответствующих переменных в вызывающей процедуре не будут изменены. 
Примечание:
Использование команды SET UDFPARMS TO VALUE не влияет на опцию WITH в команде DO ,  где по-умолчанию параметры передаются по-ссылке.

TO REFERENCE

Параметры передаются по-ссылке. Когда параметры передаются по-ссылке, в вызываемой процедуре они могут быть изменены, тогда и вызавающие параметры, в вызываемой процедуре, соответственно изменяют свои значения. 

Комментарии

Независимо от установки в этой команде  SET UDFPARMS, Вы можете управлять вариантом передачи параметров. Для этого см. дополнительно How to: Передача параметров по-ссылке и How to: Передача параметров по-значению.

Пример

Представленный пример иллюстирирует отличие в передаче параметров по-ссылке или по-значению.

  Копировать код
*** 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 does not change. ***
@ 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 changes. ***
@ 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 ***

Следующий пример демонстрирует передачу параметров по-значению, с использованием круглых скобок, и использование специального символа @ для указания, что параметры передаются по-ссылке.

  Копировать код
*** 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 ***

См. также