Function 在AutoIT中将函数作为参数传递
我有几个结构相同的函数(简化): 我想让它成为这样一个通用函数:Function 在AutoIT中将函数作为参数传递,function,generics,parameters,autoit,Function,Generics,Parameters,Autoit,我有几个结构相同的函数(简化): 我想让它成为这样一个通用函数: func doSomething($function) local $error = 1 For $i = 1 to 100 updateProgress($i) updateStatus("Processing " & $i & "/100 files") $error *= $function($i
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)
...
所以我可以这样做:
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中可能吗?我该怎么做呢?一个挑战者出现了!有趣的问题。通过内置调用,您可以将函数名作为字符串调用。例如,您有一个名为moveFiles的函数,该函数带有一个参数,您可以使用以下参数调用该函数: 调用(“移动文件”,$i) 我已经写了一个例子来说明这一点。这是处理委托、事件或回调的一种简便方法,您可能会习惯于使用其他严格语言。在这个例子中,我故意忽略了错误处理,因为有两种方法可以做到这一点。您可以返回真/假(或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