我使用的AutoIt:如何清理此代碼以縮短?
$1 = GetItemBySlot(1, 1)
$2 = GetItemBySlot(1, 2)
$3 = GetItemBySlot(1, 3)
$4 = GetItemBySlot(1, 4)
$5 = GetItemBySlot(1, 5)
代碼重複爲40行。我怎樣才能縮短它?
我使用的AutoIt:如何清理此代碼以縮短?
$1 = GetItemBySlot(1, 1)
$2 = GetItemBySlot(1, 2)
$3 = GetItemBySlot(1, 3)
$4 = GetItemBySlot(1, 4)
$5 = GetItemBySlot(1, 5)
代碼重複爲40行。我怎樣才能縮短它?
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)
。
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
[AutoIt增量變量定義]的可能重複(https://stackoverflow.com/questions/7482045/autoit-incremental-variable-definition) – user4157124 2017-10-23 01:44:20