【问题标题】:The definition of While loopWhile循环的定义
【发布时间】:2015-06-08 07:55:22
【问题描述】:

我刚开始学习 Autoit,但在理解 while 循环语句时遇到了困难。

我正在尝试制作一个脚本,该脚本旨在在图像“a.bmp”曝光时转到另一个站点。图片“a.bmp”将是某个网站的图标。

所以下面的脚本是用来感知 favicon 'a.bmp'

$search = _ImageSearch('a.bmp',0,0,0,0) 而 $search = _ImageSearch('a.bmp',0,0,0,0) 睡眠(10) 完结

这个脚本实际上运行良好。当“a.bmp”出现时,它退出循环并执行下一个操作。但问题是我后来意识到当表达式( $search = _ImageSearch('a.bmp',0,0,0,0) 为 'true' 时会执行 while 循环。

如果我提到的while循环的定义是正确的,那上面的循环是不是应该在出现'a.bmp'的时候进入无限循环?

我很困惑。如果有人回答,我将不胜感激..

【问题讨论】:

    标签: autoit


    【解决方案1】:

    你不能在需要表达式的地方赋值!

    While $search = _ImageSearch
    

    这不会给 $search 赋值,只是检查 $search 是否等于 _ImageSearch。

    来自帮助文件:

    基于表达式的循环。

    While <expression>
        statements
        ...
    WEnd
    

    如果表达式为真,则执行以下语句直到 WEnd 语句。这个循环一直持续到表达式为假为止。

    那么,在您的示例中发生了什么?

    $search = _ImageSearch('a.bmp',0,0,0,0)
    While $search = _ImageSearch('a.bmp',0,0,0,0)
    Sleep(10)
    WEnd
    

    第一个 ImageSearch 失败并将 $search 设置为 0。 在 While 循环下,您有一个表达式 $search = _ImageSearch,如果 _ImageSearch 再次失败,则该表达式为真。

    基本上你得到了While 0=0 Wend,一旦图像出现,循环就结束了。

    正确的代码是

    While Not _ImageSearch('a.bmp',0,0,0,0)
    Sleep(10)
    WEnd
    

    为了进一步改进您的代码,我将只使用一行代码。

    _WaitForImageSearch('a.bmp',0,0,0,0, 30); Will wait max 30 seconds for a.bmp to appear
    

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 2016-02-19
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2016-01-12
      • 2015-10-09
      相关资源
      最近更新 更多