如何将此代码清理得更短?

时间:2014-10-16 10:54:26

标签: autoit

我正在使用AutoIt:

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

代码重复40行。我怎样才能缩短它?

2 个答案:

答案 0 :(得分:0)

您可以使用Assign()和来缩短此时间 Eval()

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

这将是3行而不是 n 行。在运行期间,这将扩展为:

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)

的值

答案 1 :(得分:0)

For $i = 1 To 40

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

Next

根据Documentation - Intro - Arrays

  

Array是一个包含一系列数据元素的变量。此变量中的每个元素都可以通过索引号访问,该索引号与数组中元素的位置相关 - 在AutoIt中,Array的第一个元素始终是元素[0]。数组元素以定义的顺序存储,可以进行排序。

GetItemBySlotMulti()中的示例(取消测试,无错误检查):

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