- 大学三年级
- 325019
- 734
- 13
- 1738 朵
- 2853 个
- 844 个
- 20600
- 2009-10-23
|
1#
t
T
发表于 2022-02-15 20:47
|
|只看楼主
关于函数返回多个返回值的问题,这段时间有两个群友问我,那就拿来说一下。
首先我们要知道自定义的函数怎么才能有返回值? 初学按键时会用到function,sub等命令,function是定义函数,sub是定义子程序,两个命令用法上很像,但是他们的不同之处是,function有返回值,sub没有返回值。 从我个人的理解来说,function的用处包含并且大于sub,所以我现在基本不用sub。理解了这个知识点,那么函数返回值其实就是关于function命令的返回值。举个例子来说一下函数怎么才能有返回值:- TracePrint 函数名()
- function 函数名()
- 函数名=5
- End function
复制代码 运行结果:function命令定义函数,会给函数起一个名字,比如例子中叫函数名,这个命令可以是abc、a123、张三、李四,但是不能用数字开头。这个有点像定义变量, dim abc="一个内容"
返回有没有是这样的,如果在函数内部,有函数的名字等于一个内容,这个内容就是函数的返回值,其实就是把一个内容赋值给函数名字 这个内容可以和函数其他内容有关系,也可以没有关系。 这个形式对于只有一个返回值很方便,直接把要返回的内容赋值给函数,但是当有多个返回值的时候就有些麻烦了。 这个麻烦在哪里?还是用定义变量举例子: dim a=1 这是可以的,dim a=2 这也是可以的,但是同时把1和2赋值给a,就不行了。解决方法,把1和2放到一起变成“1|2”或者“1,2”,然后再赋值给变量a。 dim a=“1|2” 在使用1或者2的时候,就先用竖线作为分割符号,把1和2分割开存入到数组中,然后从数组中调用。按照变量的这个思路,函数的返回值也是可以这样的。- TracePrint 函数名()
- function 函数名()
- 函数名="返回值1|返回值2|返回值3……"
- End function
复制代码 通过把多个内容以固定分隔符拼接在一起,然后赋值给函数作为返回值。 这种方式在使用的时候有点麻烦,因为函数的返回值是多个内容的拼接,需要多加一步分割,这个变成数组再去使用。当你看到这里会不会想,如果调用函数的返回值都要分割,是不是很麻烦? 能不能让返回值简便一点?可不可以直接用数组作为返回值,答案是肯定的。 那么怎么用数组作为返回值?- dim arr=函数名()
- TracePrint arr(0)
- TracePrint arr(1)
- Function 函数名()
- Dim 数组()
- 数组(0) = 1
- 数组(1)=2
- 函数名=数组
- End function
复制代码 运行结果在函数的内部先定义一个数组,然后把多个要作为返回值的内容,先存入到数组中,然后让函数名字=数组名,这样返回值就是数组了。 注意写这一步的时候不要有括号。这么写的话,调用函数的返回值不需要分割那一步,只需要用一般数组变量存储返回值,然后调用数组内容即可。 除了用数组作为返回值以外,还有一种方法是用“假”的返回值。这个思路是来自于找图命令:- Dim intx,inty
- FindPic 0, 0, 0, 0, "Attachment:1.png","000000", 0, 0.9, intX, intY
- If intX > -1 And intY > -1 Then
- TracePrint "找到图了"
- End If
复制代码 刚接触按键的时候,我以为intx,inty是找图命令的返回值,相信很多新手朋友也是这样认为的。 因为我们用找图命令就是为了得到这个intx,inty坐标,理所当然认为它就是找图命令的返回值。但是其实这两个值不是真正的返回值。 翻看找图命令的介绍会发现,它的返回值不是坐标intx,inty,而是找到的图片的序号。 当然要获得这个返回值,写法是有一点区别的,就是需要把找图的所有参数放到一个括号里面。 对于很多命令来说,有括号和没有括号是一样的,但是找图不同。- Dim intx,inty
- dim n=FindPic(0, 0, 0, 0, "Attachment:1.png","000000", 0, 0.9, intX, intY)
- If intX > -1 And intY > -1 Then
- TracePrint "找到图了"
- End If
- TracePrint n
复制代码 这里面n就是存储返回值的变量。这种“假”的返回值也是可以用到我们的自定义函数中,本质上所有函数都是封装的命令。- Dim a,b
- call 函数名()
- TracePrint a,b
- Function 函数名()
- a = 1
- b = 2
- End Function
复制代码 使用这个方式就是用到全局变量,在函数内部把返回值赋值给全局变量,当调用函数后,返回值就被存储到变量中,直接输出变量内容就行了。 这里用于存储返回值的变量,只能是全局变量,不能既是全局变量又是局部变量。 错误写法:- Dim a,b
- call 函数名()
- TracePrint a,b
- Function 函数名()
- dim a = 1
- b = 2
- End Function
复制代码 b的写法是对的,a的写法是错误的,因为a既是全局变量又是局部变量。 运行结果:a是没有值,b是正常的。 好了这期写了三种方法,根据自己的喜好去选择。 内容就这些,欢迎留言写出你的想法,更多内容查看我的往期文章,谢谢大家阅读。 我是郭立员,咱们下篇文章再见。。。
|