S E T U D F P A R M S 命 令

Visual
FoxPro 在向用户自定义函数 (UDF) 传递参数时
指定为按值传递还是通过引用传递
语 法
SET UDFPARMS TO VALUE | REFERENCE
参 数 描 述
T O V A L U E



向
一 个 用 户 自 定 义 函 数 按 值 传 递 一 个 变 量 当 按 值 传 递 变
量 时 在 用 户 自 定义 函 数 中 可 以 更 改 变 量 的 值 但 调 用 程 序
中 变 量 的 原 值 不 变
TO REFERENCE



向
一 个 用 户 自 定 义 函 数 通 过 引 用 传 递 一 个 变 量 当 通 过 引
用 传 递 变 量 时 如果 在 用 户 自 定 义 函 数 中 更 改 了 变 量 的 值
则 调 用 程 序 中 变 量 的 原 值 也 随 之 更改
说 明


默认情况下
变量以值传递方式传递给用户自定义函数 用 DO ... WITH
传递给过程的变量为通过引用传递






不管
SET UDFPARMS 如何设置 可以强制设定以值传递方式或引用传递方式向一个UDF
传递参数 如果用括号括起一个变量 则设定按值传递 在一个变量前加
符号 可以设定以引用传递方式传递








提
示 可以把整个数组传递给一个过程或用户自定义函数 如果使用 SET
UDFPARMS TO REFERENCE 命令 或者在数组名前加 就可以传递整个数组如果使用
SET UDFPARMS TO VALUE 命令 或者用括号把数组名括起来
可以按值传递数组的第一个元素 数组元素总是按值传递
示 例
下面的示例展示了按值传递和引用传递变量的区别
*** 按值传递变量 *** CLEAR
SET TALK OFF
WAIT
' 按下键按值传递 ' WINDOW SET UDFPARMS TO VALUE
STORE 1 TO gnX
*** gnX 的值没有更改 ***
@ 2,2 SAY 'UDF value: ' + STR(plusone(gnX)) @ 4,2 SAY 'Value of gnX: '
- STR(gnX)
*** 通过引用传递变量 ***
WAIT
' 按下键按引用传递 ' WINDOW CLEAR
SET UDFPARMS TO REFERENCE
STORE 1 TO gnX
*** gnX 的值改变了 ***
@ 2,2 SAY 'UDF value: ' + STR(plusone(gnX)) @ 4,2 SAY 'Value of X: ' + STR(gnX)
SET UDFPARMS TO VALUE
*** 这个 UDF 给一个数加 1 *** FUNCTION plusone
PARAMETER gnZ
gnZ = gnZ + 1 RETURN gnZ
*** UDF 结束 ***

下面的示例和上面的一样
只是分别用括号和
来表示按值和通过引用传递变量
*** 按值传递变量 *** CLEAR
SET TALK OFF
WAIT
' 按下键按引用传递 ' WINDOW STORE 1 TO gnX
@ 2,2 SAY 'UDF value: ' + STR(plusone((gnX))) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)
*** 通过引用传递变量 ***
WAIT
' 按下键按引用传递 ' WINDOW CLEAR
STORE 1 TO gnX
*** gnX 的值改变了 ***
@ 2,2 SAY 'UDF value: ' + STR(plusone(@gnX)) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)
*** 这个 UDF 给一个数加 1*** FUNCTION plusone
PARAMETER gnZ
gnZ = gnZ + 1 RETURN gnZ
*** 结束 ***

以下是对上面的示例中的变量
通过括号和 @ 的使用分别进行值传递和引用传递
*** 按值传递内存变量 *** CLEAR
SET TALK OFF
WAIT ' 按下键按值传递 ' WINDOW STORE 1 TO gnX
@ 2,2 SAY 'UDF value: ' + STR(plusone((gnX))) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)
*** 通过引用传递内存 ***
WAIT ' 按下键按值传递 ' WINDOW CLEAR
STORE 1 TO gnX
@ 2,2 SAY 'UDF value: ' + STR(plusone(@gnX)) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)
*** 这个 UDF 给一个数加 1 *** FUNCTION plusone PARAMETER gnZ
gnZ = gnZ + 1 RETURN gnZ
*** UDF 结束 ***
请 参 阅
D O , LPARAMETER S , PARAMETERS , PARAMETERS ( ) , PROCEDURE
