AutoIt

2012-07-25 16 views
8

में पैरामीटर के रूप में एक समारोह पासिंग मैं एक ही संरचना (सरलीकृत) के साथ कुछ कार्य होते हैं:AutoIt

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 

तो:

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

मैं इस इस तरह एक सामान्य कार्य करना चाहते हैं मैं ऐसा कर सकता हूं:

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

क्या यह ऑटोआईटी v3 में संभव है और मैं इसे कैसे कर सकता हूं?

उत्तर

12

एक चुनौती प्रकट होता है! दिलचस्प सवाल आप बिल्ट-इन कॉल के साथ एक स्ट्रिंग के रूप में उनके नाम से फ़ंक्शन को कॉल कर सकते हैं।

कॉल ("moveFiles", $ i)

मैं एक उदाहरण है कि इस दर्शाता लिखा है: उदाहरण के लिए यदि आप एक समारोह एक पैरामीटर के साथ moveFiles कहा जाता है, तो आप उस समारोह के साथ कह सकते हैं। प्रतिनिधियों, घटनाओं या कॉलबैक करने का यह एक आसान सरल तरीका है क्योंकि आप अन्य सख्त भाषाओं से उपयोग किए जा सकते हैं। उदाहरण में मैंने जानबूझकर त्रुटि प्रबंधन को छोड़ दिया है क्योंकि ऐसा करने के दो तरीके हैं। आप एक सच्चे/झूठे (या 1/0) मान वापस कर सकते हैं या आप @error macro के साथ SetError फ़ंक्शन का उपयोग कर सकते हैं।

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 

यहाँ पूर्ण और काम उदाहरण है