找回密码
 加入
搜索
查看: 6034|回复: 12

[AU3基础] 如何跳出主函数中函数调用序列

  [复制链接]
发表于 2012-9-23 20:41:50 | 显示全部楼层 |阅读模式
例如

Func Main()
   
    Call("A")
    Call("B")
    Call("C")
EndFunc
  ;
Func A()
   
EndFunc

Func B()
    ;假如B函数得到的值是正确的,执行Call("C")
    ;假如B函数得到的值是错误的,不再执行Call("C"),

EndFunc

Func C()
    ;
EndFunc

能否实现这样的函数调用?
发表于 2012-9-23 21:13:18 | 显示全部楼层
回复 1# hanyueye511

你看下这是你想要的效果么

   
 Local $a=1,$b
 Main()
Func Main()
Call("A")
Call("B")
If $b=1 Then   Call("C")
 EndFunc
Func A()
EndFunc

Func B()
        If $a=1 Then 
                $b=1
        Else
                $b=0
        EndIf
        Return $b
    ;假如B函数得到的值是正确的,执行Call("C")
    ;假如B函数得到的值是错误的,不再执行Call("C"),
EndFunc
Func C()
    MsgBox(0,0,'C')
EndFunc
 楼主| 发表于 2012-9-23 21:24:31 | 显示全部楼层
这个方法有考虑过,我想每个子函数都调用一个类似exit这样的函数,但是若是还使用exit的话,会导致我整个进程全部退出。请教有没有好办法只让它退出当前函数执行,调用类似exit函数后就不在执行MAIN了
 楼主| 发表于 2012-9-23 21:27:04 | 显示全部楼层
AutoIt似乎没有异常处理Try...catch,有就方便了
发表于 2012-9-23 21:46:16 | 显示全部楼层
回复 4# hanyueye511
Return不就是函数的结束吗?
发表于 2012-9-23 21:47:31 | 显示全部楼层
回复 3# hanyueye511


    return 关键字可以让你根据需要时, 随时终止一个函数的执行, 立即从中返回主程序!

au3 有一些内置宏 @error  @extended  等, 可以在自己函数中在出错判断时用SetError设置其值...
调用此函数后, 你就可以以此判断函数执行成功与否了, 多数内置函数便是这样做的: 成功时, @error 为 0,  否则为 1等.
此外, 调用函数最好是直接以函数名来调用, 而不是用CALL. 后者有太多局限性, 比如参数是数组时, 相对来说, 要处理起来更麻烦.

简单示例:
Local $a=1,$b
a()
$b = b()
If Not @error Then c() 

Func a()
EndFunc
 
Func b()
        If $a=1 Then 
                $b=6
                                Return SetError(0, '', $b) 
        Else
                $b=0
                                Return SetError(1, '', $b)
        EndIf
EndFunc

Func C()
    MsgBox(0,'',$b)
EndFunc
 楼主| 发表于 2012-9-23 22:30:12 | 显示全部楼层
学习了,谢谢
 楼主| 发表于 2012-9-23 22:54:34 | 显示全部楼层
如果使用判断值的方法,不难实现停止主函数调用函数,除此之外没有其他方法了吗?因为我主程序调用了很多子函数例如A()~Z(),返回主函数都要先判断@error,我的程序构思是,从A()开始,函数执行成功就执行下一个函数,即成功即顺序执行A() 到 Z(), 如果某一个函数执行不成功,就执行Z()
发表于 2012-9-23 23:13:26 | 显示全部楼层
回复 8# hanyueye511
同步
发表于 2012-9-23 23:33:52 | 显示全部楼层
如果使用判断值的方法,不难实现停止主函数调用函数,除此之外没有其他方法了吗?因为我主程序调用了很多子 ...
hanyueye511 发表于 2012-9-23 22:54



    技术  研究吗?   还是特殊需求?
 楼主| 发表于 2012-9-23 23:41:09 | 显示全部楼层
采用同步调用,必须等待这段代码执行完返回结果后,调用方才能继续往下执行,似乎还是会返回主程序继续后面调用
 楼主| 发表于 2012-9-23 23:41:33 | 显示全部楼层
 楼主| 发表于 2012-9-24 00:05:14 | 显示全部楼层
求解,持续等待
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-20 09:46 , Processed in 0.080905 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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