2014-10-16 117 views
-2

我使用的AutoIt:如何清理此代碼以縮短?

$1 = GetItemBySlot(1, 1) 
$2 = GetItemBySlot(1, 2) 
$3 = GetItemBySlot(1, 3) 
$4 = GetItemBySlot(1, 4) 
$5 = GetItemBySlot(1, 5) 

代碼重複爲40行。我怎樣才能縮短它?

+0

[AutoIt增量變量定義]的可能重複(https://stackoverflow.com/questions/7482045/autoit-incremental-variable-definition) – user4157124 2017-10-23 01:44:20

回答

0

您可以通過使用Assign()Eval()縮短此。

For $i = 1 To 5 
    Assign($i, GetItemBySlot(1, $i)) 
Next 

這將是3行,而不是Ñ線。在運行時,這將擴大到:

Assign(1, GetItemBySlot(1, 1)) 
Assign(2, GetItemBySlot(1, 2)) 
Assign(3, GetItemBySlot(1, 3)) 
Assign(4, GetItemBySlot(1, 4)) 
Assign(5, GetItemBySlot(1, 5)) 

爲了得到這些,你需要使用Eval函數變量的數據。所以

For $i = 1 To 5 
    Eval($i) 
Next 

返回值GetItemBySlot(1, $i)

0
For $i = 1 To 40 

    $aItemsBySlot[$i] = GetItemBySlot(1, $i) 

Next 

作爲每Documentation - Intro - Arrays

數組是包含一系列數據元素的變量。此變量中的每個元素都可以通過索引號訪問,該索引號與數組內的元素位置相關 - 在AutoIt中,數組的第一個元素始終爲元素[0]。數組元素按照定義的順序存儲並可以排序。

實施例GetItemBySlotMulti()(untestes,沒有錯誤檢查):

Global $aItems 

; Assign: 
$aItems = GetItemBySlotMulti(1, 40) 

; Retrieve single value (output item #1 to console): 
ConsoleWrite($aItems[1] & @CRLF) 

; Retrieve all values: 
For $i = 1 To $aItems[0] 

    ConsoleWrite($aItems[$i] & @CRLF) 

Next 

; Retrieve amount of items: 
ConsoleWrite($aItems[0] & @CRLF) 

; Re-assign a single value (re-assign item #1): 
$aItems[1] = GetItemBySlot(1, 1) 

; Function (used to assign example): 
Func GetItemBySlotMulti(Const $iSlot, Const $iItems) 
    Local $aItemsBySlot[$iItems +1] 
     $aItemsBySlot[0] = $iItems 

    For $i = 1 To $iItems 

     $aItemsBySlot[$i] = GetItemBySlot($iSlot, $i) 

    Next 

    Return $aItemsBySlot 
EndFunc 

Related