Appare uno sfidante! Domanda interessante È possibile chiamare una funzione in base al proprio nome come stringa con la chiamata integrata. Per esempio si dispone di una funzione denominata Sposta file con un parametro, si può chiamare tale funzione con:
chiamata ("Sposta file", $ i)
ho scritto un esempio che illustra questo. È un modo semplice e conveniente di fare delegati, eventi o callback a cui potresti essere abituato da altre lingue rigorose. Nell'esempio ho intenzionalmente omesso la gestione degli errori perché ci sono due modi per farlo. È possibile restituire un valore true/false (o 1/0) oppure utilizzare la funzione SetError con la macro @error.
Ecco l'esempio completo e funzionante:
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
uscita:
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
fonte
2012-07-25 08:27:23