gpt4 book ai didi

function - 在 AutoIT 中将函数作为参数传递

转载 作者:行者123 更新时间:2023-12-02 21:53:52 26 4
gpt4 key购买 nike

我有一些具有相同结构(简化)的函数:

func moveFiles()  
local $error = 1
For $i = 1 to 100
updateProgress($i)
updateStatus("Processing " & $i & "/100 files")
$error *= moveFile($i)
Next
Return $error
endFunc

我想让它成为一个像这样的通用函数:

func doSomething($function)  
local $error = 1
For $i = 1 to 100
updateProgress($i)
updateStatus("Processing " & $i & "/100 files")

$error *= $function($i) ;execute the function that was passed

Next
Return $error
endFunc

所以我可以这样做:

doSomething($moveFiles)  
doSomething($compareFiles)
doSomething($removeFiles)
...

这在 AutoIt v3 中可行吗?我该怎么做?

最佳答案

挑战者出现!有趣的问题。您可以使用内置的 Call.txt 文件通过字符串形式的名称来调用函数。例如,您有一个带有参数的名为 moveFiles 的函数,您可以使用以下命令调用该函数:

Call("moveFiles", $i)

我写了一个例子来演示这一点。这是一种执行委托(delegate)、事件或回调的方便简单的方法,就像您可能习惯的其他严格语言一样。在示例中,我故意省略了错误处理,因为有两种方法可以做到这一点。您可以返回 true/false(或 1/0)值,也可以将 SetError 函数与 @error 宏一起使用。

这是完整且有效的示例:

func doSomething($function)  
local $error = 0
For $i = 1 to 5
updateProgress($i)
updateStatus("Processing " & $i & "/100 files")

Call($function, $i)
Next
Return $error
endFunc

doSomething("moveFiles")
doSomething("compareFiles")
;doSomething("removeFiles")

Func moveFiles($i)
ConsoleWrite("Moving file " & $i & @CRLF)
EndFunc

Func compareFiles($i)
ConsoleWrite("Copying file " & $i & @CRLF)
EndFunc

Func updateProgress($i)
ConsoleWrite("Stage processing at #" & $i & @CRLF)
EndFunc

Func updateStatus($msg)
ConsoleWrite($msg & @CRLF)
EndFunc

输出:

Stage processing at #1
Processing 1/5 files
Moving file 1
Stage processing at #2
Processing 2/5 files
Moving file 2
Stage processing at #3
Processing 3/5 files
Moving file 3
Stage processing at #4
Processing 4/5 files
Moving file 4
Stage processing at #5
Processing 5/5 files
Moving file 5
Stage processing at #1
Processing 1/5 files
Copying file 1
Stage processing at #2
Processing 2/5 files
Copying file 2
Stage processing at #3
Processing 3/5 files
Copying file 3
Stage processing at #4
Processing 4/5 files
Copying file 4
Stage processing at #5
Processing 5/5 files
Copying file 5

关于function - 在 AutoIT 中将函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11644997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com