SC函数递归调用和ByVal引用
(创建时间:2009年09月18日 18:03:00)
Jangogo :
SC语言和VB语言一样,默认情况下,所有的函数的参数都是ByRef的。
当函数递归调用自己,或者调用的函数里面 如果对参数的值进行了改变,由于是ByRef 的,原来的变量的值就会改变。
例如:
在我们的具体应用中,笔者就吃过亏,在会计模块的报表功能的report.sc.asp中的GetRptData()函数中
某些参数在函数体内被改变了值,如prj参数,函数在递归调用自己的时候,再一次传入的参数已经不是原来的值了。
解决的方法是全部把参数改成 ByVal ,也就是 “按值传递”,问题就解决了。
当函数递归调用自己,或者调用的函数里面 如果对参数的值进行了改变,由于是ByRef 的,原来的变量的值就会改变。
例如:
- function test(i)
- i=i-1
- test=i
- end function
- L=10
- msgbox test(L) '结果为9
- msgbox test(L) '结果为8,因为L在上次执行的时候已经变改变了值
在我们的具体应用中,笔者就吃过亏,在会计模块的报表功能的report.sc.asp中的GetRptData()函数中
某些参数在函数体内被改变了值,如prj参数,函数在递归调用自己的时候,再一次传入的参数已经不是原来的值了。
解决的方法是全部把参数改成 ByVal ,也就是 “按值传递”,问题就解决了。
- function GetRptData(ByVal DT,ByVal y,ByVal d1,ByVal d2,ByVal ac,ByVal isQty,ByVal isFCur,ByVal company,ByVal deptstaff,ByVal prj,ByVal po,ByVal goods,ByVal storage,ByVal fcur,ByVal cnstr)
- '......
- end function
- function test( ByVal i)
- i=i-1
- test=i
- end function
- L=10
- msgbox test(L) '结果为9
- msgbox test(L) '结果仍然为9,因为L值没有改变
文档中心