找回密码
 加入
搜索
查看: 8132|回复: 15

return如何返回多个变量

  [复制链接]
发表于 2008-7-25 11:57:45 | 显示全部楼层 |阅读模式
在自定义函数中要返回多个变量
func bbbb()
$a
$b
$c
endfunc

怎么用return来返回,是不是RETURN一次只能返回一个变量?

[ 本帖最后由 leewger 于 2008-7-25 15:19 编辑 ]
发表于 2008-7-25 16:43:28 | 显示全部楼层
函数的参数传递方式有两种,值传递和址传递

所谓值传递,就是参数在传递时仅仅是传递的参数的值,举个简单的例子,例如下属程序段:



Local $a,$b,$c
$a=1
$b=2
$c=0
_Test($a,$b)
$c=$a+$b
MsgBox(0,"Only a Test",$c)

Func _Test($x,$y)
        $x=$x+1
        $y=$y+1
EndFunc



_Test是一个没有返回值的简单函数,主程序段中调用_Test($a,$b),这时$a的值传递给$x,$b的值传递给$y,这时对$x和$y的任何更改操作只和$x和$y有关,无论怎么对$x和$y进行更改,例如_Test中的$x和$y都自加1,都与$a和$b无关

运行这个程序后,$c的值为3

值传递也是我们普遍使用的方法,下面说一下址传递

所谓址传递,简单说是把一个变量的地址传给另一个变量,这就像给一个人取个小名,你喊他的大名和小名他都答应一样

看下面的这段程序:

Local $a,$b,$c
$a=1
$b=2
$c=0
_Test($a,$b)
$c=$a+$b
MsgBox(0,"Only a Test",$c)

Func _Test(ByRef $x,ByRef $y)
        $x=$x+1
        $y=$y+1
EndFunc


这段程序中 _Test的变量$x和$y前都添加了ByRef,这说明了$x和$y都是址传递。简单说,$x是$a的小名,$y是$b的小名,对$x和$y的操作相当于对$a和$b直接操作

这段程序运行后,$c的结果为5

[ 本帖最后由 skyfree 于 2008-7-25 16:45 编辑 ]

评分

参与人数 2金钱 +60 贡献 +10 收起 理由
anythinging + 30 很给力!
502762378 + 30 + 10 非常感谢

查看全部评分

发表于 2008-7-25 12:53:31 | 显示全部楼层
要想返回多个值
1 可以用数组
2 字符串,多个值组合成而成, (使用时需要再解析)
3 使用全局变量

[ 本帖最后由 llztt 于 2008-7-25 12:54 编辑 ]
发表于 2008-7-25 13:25:41 | 显示全部楼层
原帖由 llztt 于 2008-7-25 12:53 发表
要想返回多个值
1 可以用数组
2 字符串,多个值组合成而成, (使用时需要再解析)
3 使用全局变量


正解。楼主的示例可以用一个数组返回。
$X=ABC()
MsgBox(0,"",$X[1]&$X[2]&$X[3])

Func ABC()
        Dim $y[4]
        $y[1]="ABVDEFG"
        $Y[2]="abcdefg"
        $Y[3]=3
        Return $Y
EndFunc
 楼主| 发表于 2008-7-25 15:19:10 | 显示全部楼层
明白了,谢谢
发表于 2008-7-25 16:43:58 | 显示全部楼层
利用址传递,我们可以方便的让一个函数返回多个值

这个在其他语言中是十分常见的处理方法

评分

参与人数 1金钱 +10 收起 理由
boyhong + 10 感谢您热心的分享~~

查看全部评分

发表于 2008-7-25 18:13:31 | 显示全部楼层
以前还真没注意过BYREF这东西,经SKY介绍,了解了一下

这东西改动的是全局变量的值, 返回的变量都是已经提前声明过的。。有了这家伙,函数确实更通用了。。嘿嘿,又学一招

学过一点JAVA,没见过有这类似工作方式的东西。。所以不打算用这东西
发表于 2012-10-24 12:00:54 | 显示全部楼层
谢谢skyfree详细通俗的讲解! 明白了,又学到一招。帮助中的确没找到
发表于 2013-3-16 04:27:20 | 显示全部楼层
多谢SKY讲解,帮助里还真没有,学习了
发表于 2013-10-28 00:51:52 | 显示全部楼层
学了一招,太谢谢sky拉
发表于 2013-11-20 10:22:04 | 显示全部楼层
自定义函数 返回值 对我很有用
发表于 2015-10-17 15:10:37 | 显示全部楼层
skyfree讲解的非常清楚,把byref帮助文件中没说清楚的地方讲的明明白白
谢谢
发表于 2016-3-24 15:28:20 | 显示全部楼层
回复收藏,byref原来是传递地址的,帮助文档说得有点乱...
发表于 2016-3-24 15:51:21 | 显示全部楼层
跟VB语言类似
发表于 2016-4-16 08:59:39 | 显示全部楼层
本帖最后由 zps26 于 2016-4-16 09:57 编辑

return如何返回多个变量

函数传值与传址
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-25 10:14 , Processed in 0.077152 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表