hanyueye511 发表于 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

hanyueye511 发表于 2012-9-23 21:24:31

这个方法有考虑过,我想每个子函数都调用一个类似exit这样的函数,但是若是还使用exit的话,会导致我整个进程全部退出。请教有没有好办法只让它退出当前函数执行,调用类似exit函数后就不在执行MAIN了

hanyueye511 发表于 2012-9-23 21:27:04

AutoIt似乎没有异常处理Try...catch,有就方便了

xms77 发表于 2012-9-23 21:46:16

回复 4# hanyueye511
Return不就是函数的结束吗?

user3000 发表于 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

hanyueye511 发表于 2012-9-23 22:30:12

学习了,谢谢

hanyueye511 发表于 2012-9-23 22:54:34

如果使用判断值的方法,不难实现停止主函数调用函数,除此之外没有其他方法了吗?因为我主程序调用了很多子函数例如A()~Z(),返回主函数都要先判断@error,我的程序构思是,从A()开始,函数执行成功就执行下一个函数,即成功即顺序执行A() 到 Z(), 如果某一个函数执行不成功,就执行Z()

netegg 发表于 2012-9-23 23:13:26

回复 8# hanyueye511
同步

魔导 发表于 2012-9-23 23:33:52

如果使用判断值的方法,不难实现停止主函数调用函数,除此之外没有其他方法了吗?因为我主程序调用了很多子 ...
hanyueye511 发表于 2012-9-23 22:54 http://www.autoitx.com/images/common/back.gif


    技术研究吗?   还是特殊需求?

hanyueye511 发表于 2012-9-23 23:41:09

采用同步调用,必须等待这段代码执行完返回结果后,调用方才能继续往下执行,似乎还是会返回主程序继续后面调用

hanyueye511 发表于 2012-9-23 23:41:33

{:face (245):}

hanyueye511 发表于 2012-9-24 00:05:14

求解,持续等待
页: [1]
查看完整版本: 如何跳出主函数中函数调用序列