[基础解答]安卓按键中自定义的函数如何返回多个返回值

关于函数返回多个返回值的问题,这段时间有两个群友问我,那就拿来说一下。
首先我们要知道自定义的函数怎么才能有返回值?


初学按键时会用到function,sub等命令,function是定义函数,sub是定义子程序,两个命令用法上很像,但是他们的不同之处是,function有返回值,sub没有返回值。


从我个人的理解来说,function的用处包含并且大于sub,所以我现在基本不用sub。理解了这个知识点,那么函数返回值其实就是关于function命令的返回值。举个例子来说一下函数怎么才能有返回值:


TracePrint 函数名()
function 函数名()
  函数名=5
End function

运行结果:


当前脚本第1行:5

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

运行结果


当前脚本第2行:1
当前脚本第3行:2

在函数的内部先定义一个数组,然后把多个要作为返回值的内容,先存入到数组中,然后让函数名字=数组名,这样返回值就是数组了。


注意写这一步的时候不要有括号。

这么写的话,调用函数的返回值不需要分割那一步,只需要用一般数组变量存储返回值,然后调用数组内容即可。


除了用数组作为返回值以外,还有一种方法是用“假”的返回值。这个思路是来自于找图命令:


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既是全局变量又是局部变量。


运行结果:

当前脚本第3行:null 2

a是没有值,b是正常的。

转载自微信公众号:3分钟学堂

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注