Compartir a través de


SET UDFPARMS (Comando)

Especifica si Visual FoxPro transfiere los parámetros a una función definida por el usuario (FDU) por valor o por referencia.

SET UDFPARMS TO VALUE | REFERENCE

Parámetros

  • TO VALUE
    Especifica que una variable se transfiera por valor a una función definida por el usuario. Al transferir una variable por valor, el valor de la variable se puede modificar en la función definida por el usuario, pero el valor original de la variable en el programa que llama no se modifica.
  • TO REFERENCE
    Especifica que una variable se transfiera por referencia a una función definida por el usuario. Cuando una variable se transfiera por referencia y la función definida por el usuario cambie el valor de la variable transferida, el valor original de la variable en el programa que llama también se modificará.

Observaciones

De forma predeterminada, las variables se transfieren por valor a una función definida por el usuario. (Las variables transferidas a procedimientos con DO ... WITH se transfieren por referencia).

Puede forzar que los parámetros se transfieran a una FDU por valor o por referencia, independientemente de la configuración de SET UDFPARMS. Encierre la variable entre paréntesis para obligar a que se transfiera por valor. Anteponga el símbolo @ a la variable para forzar a que se transfiera por referencia.

Sugerencia   Pueden transferirse matrices completas a un procedimiento o FDU. Se transferirá la matriz completa si ejecuta SET UDFPARMS TO REFERENCE o si incluye @ delante del nombre de la matriz. Si ejecuta SET UDFPARMS TO VALUE o escribe el nombre de la matriz entre paréntesis, se pasa por valor el primer elemento de la matriz. Los elementos de matriz siempre se pasan por valor.

Ejemplo

El ejemplo siguiente ilustra la diferencia entre transferir variables por valor y por referencia.

** 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 **

Aquí está el ejemplo anterior con las variables transferidas por valor y por referencia, a través del uso de paréntesis y @, respectivamente:

** 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 **

Vea también

DO | LPARAMETERS | PARAMETERS | PARAMETERS( ) | PROCEDURE