leewger 发表于 2008-7-25 11:57:45

return如何返回多个变量

在自定义函数中要返回多个变量
func bbbb()
$a
$b
$c
endfunc

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

[ 本帖最后由 leewger 于 2008-7-25 15:19 编辑 ]

skyfree 发表于 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 编辑 ]

llztt 发表于 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 发表 http://www.autoitx.com/images/common/back.gif
要想返回多个值
1 可以用数组
2 字符串,多个值组合成而成, (使用时需要再解析)
3 使用全局变量

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

Func ABC()
        Dim $y
        $y="ABVDEFG"
        $Y="abcdefg"
        $Y=3
        Return $Y
EndFunc

leewger 发表于 2008-7-25 15:19:10

明白了,谢谢

skyfree 发表于 2008-7-25 16:43:58

利用址传递,我们可以方便的让一个函数返回多个值

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

llztt 发表于 2008-7-25 18:13:31

以前还真没注意过BYREF这东西,经SKY介绍,了解了一下

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

学过一点JAVA,没见过有这类似工作方式的东西。。所以不打算用这东西

sd23 发表于 2012-10-24 12:00:54

谢谢skyfree详细通俗的讲解! 明白了,又学到一招。帮助中的确没找到

xdcysten 发表于 2013-3-16 04:27:20

多谢SKY讲解,帮助里还真没有,学习了

fenhanxue 发表于 2013-10-28 00:51:52

学了一招,太谢谢sky拉

iori2882 发表于 2013-11-20 10:22:04

自定义函数 返回值 对我很有用

ncxj 发表于 2015-10-17 15:10:37

skyfree讲解的非常清楚,把byref帮助文件中没说清楚的地方讲的明明白白
谢谢

chamlien 发表于 2016-3-24 15:28:20

回复收藏,byref原来是传递地址的,帮助文档说得有点乱...

h20040606 发表于 2016-3-24 15:51:21

跟VB语言类似

zps26 发表于 2016-4-16 08:59:39

本帖最后由 zps26 于 2016-4-16 09:57 编辑

return如何返回多个变量

函数传值与传址
页: [1] 2
查看完整版本: return如何返回多个变量