4.0中,最重要的几大改如下:
- 允许数组相互直接赋值,并允许数组成为函数的参数。
- 允许在函数中调用后面声明的函数,即函数声明的先后与调用关系无关。使间接递归成为可能。
- 允许在定义了函数之后的脚本位置定义全局变量。这样USE子脚本中也可以声明全局变量了,使其功能可以更灵活。
以下分别对这几大改进举例说明
允许数组相互直接赋值,并允许数组成为函数的参数。
例1,数组相互直接赋值
function main
dim arr1[10]
arr1[1]=5
#将数组arr1整体COPY至arr2
arr2=arr1
#输出arr2[1]的值,应为5
Print(arr2[1])
end function
例2,数组作为参数
function fx(arr1, byref arr2)
Print(arr1[1])
#改变byref参数arr2中的某个元素的值
arr2[1]=10
end function
function main
dim arr1[10],arr2[10]
arr1[1]=5
fx(arr1, arr2)
#输出arr2[1]值。此值在fx函数中被改变,应输出10
Print(arr2[1])
end function
允许在函数中调用后面声明的函数,即函数声明的先后与调用关系无关。
例
function main
fx()
end function
#函数fx声明在main函数之后,同样可以被调用
function fx
Print("Hello")
end function
允许在定义了函数之后的脚本位置定义全局变量。
例
dim a
function fx
#a与b都是全局变量。即使b在后面才定义,也不影响它被前面声明的函数所调用
Print(a)
Print(b)
end function
dim b
function main
a=1
b=2
fx()
end function
技巧
利用这些新改进,在脚本中用USE来加载其他子脚本变的更强大。
我们知道,在脚本的任何位置,我们可以用
#USE 脚本名
来加载一个脚本的内容到当前位置。
之前由于dim定义只允许放在所有的函数定义之前,这使得在子脚本中放一些需要使用自定义的全局变量的函数变的很困难,特别是要USE多个这样的子脚本的时候。在4.0版本以后,这样的问题就解决了。
例:
主脚本内容:
function fx
end function
#use utils.ser
function main
#访问在子脚本中定义的全局变量
a=1
#访问在子脚本中定义的函数
myPrint()
end function
子脚本utils.ser内容:
dim a
function myPrint
Print(a)