子程序过程函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SET UDFPARMS TO VALUE 或默认
按引用传递的2种情况:
“DO 过程名 WITH 内存变量” Do Do Do DO Do sub1 sub1 sub1 sub1 sub1 with with with WITH with 2 a b+1,(b) 2,x*2,c asc("a")
执行过“SET UDFPARMS TO REFERENCE”的“过程名(内存变量)” test(a,2,c+1) SET UDFPARMS TO REFERENCE test(a,(b),c+1) SET UDFPARMS TO VALUE test(a,b,c+1)
调用
do 过程名 或 过程名()
传参注意事项1(参数个数问题)
实参个数要小于等于形参个数。
Do sub with a,b,c
Do sub with a,b
X=a y=b
z=.F.
Procedure sub Parameters x,y,z … Endproc
Do sub with a,b,c,d
传参注意事项2(参数类型问题)
sub2(b,2) ?a,b,c
set udfparms to reference sub2((b),c) ?a,b,c
函数练习:编写求阶层的函数jc(),然后利用 该函数计算5!+10!。
例如:
a=jc(5)
b=jc(10) ?a+b
FUNCTION jc PARAMETERS x s=1 for i=1 to x s=s*i endfor RETURN s ENDFUNC
两种传递方式:按值和按引用(地址) 按值传递: a=1 Do sub with Procedure sub Parameters x (a) 按值引用传递: a=1 Do sub with Procedure sub Parameters x a
x=2
Endpro
x=2
Endpro
说明:也可以理解为,按“引用”传递时,实参跟着对应的形参变化。
子程序
引例:求半径为3的圆的周长和面积 程序.prg
d=2*3.14*3 ?d s=3.14*3*3 ?s
子程序
主程序.prg 程序 2( ) do 程序 2 程序 3( ) do 程序 3
子程序1.prg
d=2*3.14*3 ?d
子程序2.prg
s=3.14*3*3 ?s
过程(情况1:过程和主程序在同一文件中)
什么时候按值传?什么时候按引用传?
(需要考察实参类型和调用方式)

例如:
常量:2
引用

DO 过程名 WITH 内存变量,常量,表达式
do mysub
a “abc”
with a,2,"5",a+2,xyz,trim(a)
面积 .t. … … {^2005-6-12}
内存变量:
@a 强制按引用传递 x x2 和 值 引用 abc
表达式:(a) a+3 val(“8”) 2+6 … 过程名(内存变量,常量,表达式) set udfparms to reference set udfparms to reference 例: mysub("5",a,a+2) mysub("5",a,a+2)

SET UDFPARMS TO REFERENCE
传参练习
PROCEDURE sub1 PARAMETERS x,y,z,k x=x+2 y=y+3 z=z+4 k=k+5 RETURN PROCEDURE sub2 PARAMETERS x,y x=x*2 y=y*3 RETURN
store 1 to a,b,c DO sub1 WITH 2,a,(b),c*2 ?a,b,c
优点:可变数据
形参
带与不带参数的过程区别
过程
不带参数 Procedure 过程名 … Endproc 带参数 Procedure 过程名 x,y,z Parameters 形参列表 … Endproc a,5,b+2 do 过程名 with 实参列表 或 过程名((a,5,b+2) 实参列表)
定义
实参与形参类型要一致
Do sub with 5 Do sub with "5" Do sub with .T. Do sub with {^2007-05-06}
Procedure sub Parameters x s=3.14*x**2 ? s Endproc
Байду номын сангаас
*传参注意事项3(传递方式问题,非常重要)
Procedure sub1 d=2*3.14*3 ?d Endproc
缺点:固定数据
do sub1 with 5 a=6 do sub1 with a do sub1 with a+2
或sub1(5)
或sub1(a) 或sub1(a+2)
实参
Procedure sub1 Parameters r d=2*3.14*r ?d Endproc
。 程序1.prg do sub1 sub1( ) do sub2 sub2( ) PROCEDURE sub1 d=2*3.14*3 ?d ENDPROC PROCEDURE sub2 s=3.14*3*3 ?s ENDPROC
过程2情况1:过程和主程序不在同一文件中
主程序.prg
Set Procudure To 程序1 ,程序2 do sub1 do sub2 Set Procudure To
a=2 b=3 c=5
传参例题
“DO 过程名 WITH 内存变量”
执行过“SET UDFPARMS TO REFERENCE”的“过程名(内存变量)”
DO test WITH a,b,c+1 ?a,b,c
SET UDFPARMS TO VALUE test(a,b,c+1) ?a,b,c SET UDFPARMS TO REFERENCE test(a,(b),c+1) ?a,b,c PROCEDURE test PARAMETERS x,y,z x=x+1 y=y+1 z=z+1 RETURN
程序1.prg
PROCEDURE sub1 d=2*3.14*3 ?d ENDPROC PROCEDURE sub2 程序2.prg PROCEDUREs=3.14*3* sub2 3 ?s s=3.14*3* ENDPROC 3 ?s
ENDPROC
带参数的过程及其调用
do sub1 ) 或sub1(
相关文档
最新文档