• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[郭立员] [安卓按键]自定义的函数如何返回多个返回值 [复制链接]

1#
关于函数返回多个返回值的问题,这段时间有两个群友问我,那就拿来说一下。

首先我们要知道自定义的函数怎么才能有返回值?

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

从我个人的理解来说,function的用处包含并且大于sub,所以我现在基本不用sub。理解了这个知识点,那么函数返回值其实就是关于function命令的返回值。举个例子来说一下函数怎么才能有返回值:
  1. TracePrint 函数名()
  2. function 函数名()
  3. 函数名=5
  4. End function
复制代码
运行结果:
  1. 当前脚本第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分割开存入到数组中,然后从数组中调用。按照变量的这个思路,函数的返回值也是可以这样的。
  1. TracePrint 函数名()
  2. function 函数名()
  3. 函数名="返回值1|返回值2|返回值3……"
  4. End function
复制代码
通过把多个内容以固定分隔符拼接在一起,然后赋值给函数作为返回值。

这种方式在使用的时候有点麻烦,因为函数的返回值是多个内容的拼接,需要多加一步分割,这个变成数组再去使用。当你看到这里会不会想,

如果调用函数的返回值都要分割,是不是很麻烦?

能不能让返回值简便一点?可不可以直接用数组作为返回值,答案是肯定的。

那么怎么用数组作为返回值?
  1. dim arr=函数名()
  2. TracePrint arr(0)
  3. TracePrint arr(1)
  4. Function 函数名()
  5. Dim 数组()
  6. 数组(0) = 1
  7. 数组(1)=2
  8. 函数名=数组
  9. End function
复制代码
运行结果
  1. 当前脚本第2行:1
  2. 当前脚本第3行:2
复制代码
在函数的内部先定义一个数组,然后把多个要作为返回值的内容,先存入到数组中,然后让函数名字=数组名,这样返回值就是数组了。
注意写这一步的时候不要有括号。这么写的话,调用函数的返回值不需要分割那一步,只需要用一般数组变量存储返回值,然后调用数组内容即可。

除了用数组作为返回值以外,还有一种方法是用“假”的返回值。这个思路是来自于找图命令:
  1. Dim intx,inty
  2. FindPic 0, 0, 0, 0, "Attachment:1.png","000000", 0, 0.9, intX, intY
  3. If intX > -1 And intY > -1 Then
  4. TracePrint "找到图了"
  5. End If
复制代码
刚接触按键的时候,我以为intx,inty是找图命令的返回值,相信很多新手朋友也是这样认为的。
因为我们用找图命令就是为了得到这个intx,inty坐标,理所当然认为它就是找图命令的返回值。但是其实这两个值不是真正的返回值。


翻看找图命令的介绍会发现,它的返回值不是坐标intx,inty,而是找到的图片的序号。

当然要获得这个返回值,写法是有一点区别的,就是需要把找图的所有参数放到一个括号里面。

对于很多命令来说,有括号和没有括号是一样的,但是找图不同。
  1. Dim intx,inty
  2. dim n=FindPic(0, 0, 0, 0, "Attachment:1.png","000000", 0, 0.9, intX, intY)
  3. If intX > -1 And intY > -1 Then
  4. TracePrint "找到图了"
  5. End If
  6. TracePrint n
复制代码
这里面n就是存储返回值的变量。这种“假”的返回值也是可以用到我们的自定义函数中,本质上所有函数都是封装的命令。
  1. Dim a,b
  2. call 函数名()
  3. TracePrint a,b

  4. Function 函数名()
  5. a = 1
  6. b = 2
  7. End Function
复制代码
使用这个方式就是用到全局变量,在函数内部把返回值赋值给全局变量,当调用函数后,返回值就被存储到变量中,直接输出变量内容就行了。

这里用于存储返回值的变量,只能是全局变量,不能既是全局变量又是局部变量。

错误写法
  1. Dim a,b
  2. call 函数名()
  3. TracePrint a,b

  4. Function 函数名()
  5. dim a = 1
  6. b = 2
  7. End Function
复制代码
b的写法是对的,a的写法是错误的,因为a既是全局变量又是局部变量。
运行结果:

  1. 当前脚本第3行:null 2
复制代码
a是没有值,b是正常的。

好了这期写了三种方法,根据自己的喜好去选择。

内容就这些,欢迎留言写出你的想法,更多内容查看我的往期文章,谢谢大家阅读。

我是郭立员,咱们下篇文章再见。。。

最后编辑郭立员 最后编辑于 2022-02-15 20:56:13
扫码免费获取我的基础教程【视频教程】
扫码下方二维码关注我的公众号:3分钟学堂

QQ交流群:936858410
2#

感谢大佬分享,超级有用。又能节省很多代码

3#

有帮助,谢谢楼主了

发新话题 回复该主题