- Offizieller Beitrag
Wenn man in anderen Programmiersprachen unterwegs ist, wird einem erst bewusst, wenn etwas aus AutoIt gewohntes fehlt. In diesem Fall geht es um Enumeration, ist in Lua nicht implementiert.
Erschwerend zur Gestaltung einer eigenen Funktion kommt hinzu, dass Variablen in Lua immer ByVal sind. Also Variablen deklarieren und ByRef in der Funktion Werte zuweisen geht nicht.
Ich muss eine variable Anzahl von Werten aus der Funktion zurückgeben. Zum Glück erlaubt Lua den Return mehrerer Werte auf einmal. Die folgende Funktion tut nun was sie soll. Kleiner Schönheitsfehler ist, dass ich als Parameter die Anzahl der zu enumerierenden Werte angeben muss.
Python: Enum
------------------------------------------------------------------------- FUNCTIONS ----------------
Enum = {}
----------------------------------------------------------------------------------------------------
--[[ Enumerates values by step (positive/negative integer)
_count The amount of variables to generate values for.
_step The step width (+n/-n). Default is 1.
_start The start value for the first variable. Default is 0.
]]
----------------------------------------------------------------------------------------------------
Enum.ByStep = function(self, _count, _step, _start)
_step = _step or 1
return self:Enum(_count, _step, _start)
end
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
--[[ Enumerates values by factor (positive integer)
_count The amount of variables to generate values for.
_factor The factor for increasing the values. (n^0, n^1, n^2, n^_count-1)
]]
----------------------------------------------------------------------------------------------------
Enum.ByFactor = function(self, _count, _factor)
_factor = _factor or 1
return self:Enum(_count, _factor, '*')
end
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
--[[ The main enumerating function ]]
----------------------------------------------------------------------------------------------------
Enum.Enum = function(self, _count, _step, _start)
_start = _start or 0
local tRet, factor = {}, 1
if type(_start) == 'string' then
factor = _step
_step = 0
_start = 1
end
for i = 1, _count, 1 do
table.insert(tRet, _start)
_start = (_start +_step) * factor
end
return unpack(tRet)
end
----------------------------------------------------------------------------------------------------
Alles anzeigen
Python: Anwendung im Vergleich zu AutoIt
-- AutoIt: Local Enum $a, $b, $c
local a, b, c = Enum:ByStep(3)
print(a, b, c)
-- AutoIt: Local Enum Step -2 $a = 5, $b, $c
local a, b, c = Enum:ByStep(3, -2, 5)
print(a, b, c)
-- AutoIt: Local Enum Step *4 $a, $b, $c
local a, b, c = Enum:ByFactor(3, 4)
print(a, b, c)
Alles anzeigen