【问题标题】:exit from loop if condition meets in eclipse rcptt如果在 Eclipse rcptt 中满足条件,则退出循环
【发布时间】:2018-07-10 21:41:17
【问题描述】:

如果在 eclipse rcptt 中满足条件,我想退出循环。

我正在使用以下代码:

proc "wait-until" [val iconName] {
    loop [val count 1] [val n 5] {
        if [$count | lt $n] {

            try{

                let [val text [get-button "Configure" | get-property "getToolTipText()" -raw]] {
                    if [$text | contains $iconName] {

                        recur [$count | plus 100] [$n]
                    }
                }
            } -catch {
                show-alert "inside catch"
            }

            recur [$count | plus 1] [$n]
        } -else {
        }
    }
}

但如果尝试条件也满足,它会继续。

我哪里做错了?

谢谢

【问题讨论】:

    标签: eclipse eclipse-rcptt


    【解决方案1】:

    RCPTT 中的循环很奇怪,因为它们不是简单地迭代,而是像递归那样“深入”。

    关键字'recur'是为了表达这一点。

    在您的情况下,如果 try{} 在第 (n) 次成功运行,它仍然必须“爬出”并在 'recur' 指令 (n-1) 次之后执行代码部分。

    如果可能,您应该重新构建您的代码,将“recur”作为循环中的最后一条指令。

    【讨论】:

    • 如果 [$text | contains $iconName] 正在工作,因为我使用 show-alert 命令检查了该值。但如果条件满足,它不会中断。你能给我一个例子,如何打破 rcptt 循环,或者我如何等​​到特定元素被加载。
    • 我不清楚。你能给我一个例子我如何停止循环执行。无需使用我的示例。你可以通过提供一个例子来帮助我。
    • 你通过不调用'recur'来停止循环。如果要从堆栈中跳出,则引发异常。即:获取窗口“Foo”。不要把循环想象成一个循环,而是把它们想象成一个可以通过编写'recur'来调用的函数。
    • 好吧……为你实际付出的时间点赞。谢谢
    【解决方案2】:

    好吧,我想出了如下解决方案:

    proc "wait-for-button" [val name] {
      loop [val count 0] {
      try {
          get-button $name
          } -catch {
                  if [eq $count 300] { // 30 seconds
                      throw-error [concat "wait-for-button: Could not find button " $name]
                  }
                  wait 100
                 recur [$count | plus 1]
         }//catch ends
      }//loop ends
    }//proc -ends
    

    它实际上做了什么,它将迭代 300 次。如果它在 try 中找到一个按钮,它将停止执行。 如果没有,它会去 catch 块并再次进行下一次递归。

    【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2014-10-05
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    相关资源
    最近更新 更多