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

S E T U D F P A R M S 命 令 - 图1S E T U D F P A R M S 命 令 - 图2Visual FoxPro 在向用户自定义函数 (UDF) 传递参数时 指定为按值传递还是通过引用传递

语 法

SET UDFPARMS TO VALUE | REFERENCE

参 数 描 述

T O V A L U E

S E T U D F P A R M S 命 令 - 图3S E T U D F P A R M S 命 令 - 图4S E T U D F P A R M S 命 令 - 图5S E T U D F P A R M S 命 令 - 图6向 一 个 用 户 自 定 义 函 数 按 值 传 递 一 个 变 量 当 按 值 传 递 变 量 时 在 用 户 自 定义 函 数 中 可 以 更 改 变 量 的 值 但 调 用 程 序 中 变 量 的 原 值 不 变

TO REFERENCE

S E T U D F P A R M S 命 令 - 图7S E T U D F P A R M S 命 令 - 图8S E T U D F P A R M S 命 令 - 图9S E T U D F P A R M S 命 令 - 图10向 一 个 用 户 自 定 义 函 数 通 过 引 用 传 递 一 个 变 量 当 通 过 引 用 传 递 变 量 时 如果 在 用 户 自 定 义 函 数 中 更 改 了 变 量 的 值 则 调 用 程 序 中 变 量 的 原 值 也 随 之 更改

说 明

S E T U D F P A R M S 命 令 - 图11S E T U D F P A R M S 命 令 - 图12S E T U D F P A R M S 命 令 - 图13默认情况下 变量以值传递方式传递给用户自定义函数 用 DO ... WITH 传递给过程的变量为通过引用传递 S E T U D F P A R M S 命 令 - 图14

S E T U D F P A R M S 命 令 - 图15S E T U D F P A R M S 命 令 - 图16S E T U D F P A R M S 命 令 - 图17S E T U D F P A R M S 命 令 - 图18S E T U D F P A R M S 命 令 - 图19S E T U D F P A R M S 命 令 - 图20不管 SET UDFPARMS 如何设置 可以强制设定以值传递方式或引用传递方式向一个UDF 传递参数 如果用括号括起一个变量 则设定按值传递 在一个变量前加 S E T U D F P A R M S 命 令 - 图21 符号 可以设定以引用传递方式传递

S E T U D F P A R M S 命 令 - 图22S E T U D F P A R M S 命 令 - 图23S E T U D F P A R M S 命 令 - 图24S E T U D F P A R M S 命 令 - 图25S E T U D F P A R M S 命 令 - 图26S E T U D F P A R M S 命 令 - 图27S E T U D F P A R M S 命 令 - 图28S E T U D F P A R M S 命 令 - 图29S E T U D F P A R M S 命 令 - 图30提 示 可以把整个数组传递给一个过程或用户自定义函数 如果使用 SET UDFPARMS TO REFERENCE 命令 或者在数组名前加 就可以传递整个数组如果使用 SET UDFPARMS TO VALUE 命令 或者用括号把数组名括起来 可以按值传递数组的第一个元素 数组元素总是按值传递

示 例

S E T U D F P A R M S 命 令 - 图31下面的示例展示了按值传递和引用传递变量的区别

*** 按值传递变量 *** CLEAR

SET TALK OFF

S E T U D F P A R M S 命 令 - 图32WAIT ' 按下键按值传递 ' 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)

*** 通过引用传递变量 ***

S E T U D F P A R M S 命 令 - 图33WAIT ' 按下键按引用传递 ' 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 结束 ***

S E T U D F P A R M S 命 令 - 图34S E T U D F P A R M S 命 令 - 图35下面的示例和上面的一样 只是分别用括号和 S E T U D F P A R M S 命 令 - 图36 来表示按值和通过引用传递变量

*** 按值传递变量 *** CLEAR

SET TALK OFF

S E T U D F P A R M S 命 令 - 图37WAIT ' 按下键按引用传递 ' WINDOW STORE 1 TO gnX

@ 2,2 SAY 'UDF value: ' + STR(plusone((gnX))) @ 4,2 SAY 'Value of gnX: ' + STR(gnX)

*** 通过引用传递变量 ***

S E T U D F P A R M S 命 令 - 图38WAIT ' 按下键按引用传递 ' 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

*** 结束 ***

S E T U D F P A R M S 命 令 - 图39S E T U D F P A R M S 命 令 - 图40以下是对上面的示例中的变量 通过括号和 @ 的使用分别进行值传递和引用传递

*** 按值传递内存变量 *** 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