Benutzer-Werkzeuge

Webseiten-Werkzeuge


utilfunctions:funktionen_aufrufen

Funktionen aufrufen

variabler Funktionsaufruf mit xpcall

Ich hatte folgende Problemstellung: Ich will mehrere Funktionen in einem Table speichern und diese dann per table.getn(funktionstable) aufrufen.

Lösung: Per xpcall aufrufen. Lösungsproblemstellung: Leider nur ohne Argumente machbar Fazit: Schreiben einer eigenen Funktion welche xpcall mit Argumenten erlaubt Achtung: xpcall direkt zu überschreiben hat leider Spielinterne Funktionen zerschossen, also hab ich die Funktion xpcall_args genannt

Code

function xpcall_args(func, err, ...)
	local args = table.getn(arg)
	if args == 0 then return xpcall(function() return func() end, err)
	elseif args == 1 then return xpcall(function() return func(arg[1]) end, err)
	elseif args == 2 then return xpcall(function() return func(arg[1],arg[2]) end, err)
	elseif args == 3 then return xpcall(function() return func(arg[1],arg[2],arg[3]) end, err)
	elseif args == 4 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4]) end, err)
	elseif args == 5 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5]) end, err)
	elseif args == 6 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6]) end, err)
	elseif args == 7 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7]) end, err)
	elseif args == 8 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8]) end, err)
	elseif args == 9 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9]) end, err)
	elseif args == 10 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9],arg[10]) end, err)
	elseif args == 11 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9],arg[10],arg[11]) end, err)
	elseif args == 12 then return xpcall(function() return func(arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7],arg[8],arg[9],arg[10],arg[11],arg[12]) end, err)
	else assert(false,"Zuviele Argumente fuer XP Call!")
	end
end

Beispielanwendung

xpcall_beispiel = {}
table.insert(xpcall_beispiel, function()
	Message("xpcall_args Beispiel:")
	end)
table.insert(xpcall_beispiel, function(_a,_b)
	Message(_a.." ".._b)
	end)
	--Message(table.getn(xpcall_beispiel))
for i = 1,table.getn(xpcall_beispiel) do
	xpcall_args( xpcall_beispiel[i],nil,"@color:255,255,0","Farbiger Text" )
end
utilfunctions/funktionen_aufrufen.txt · Zuletzt geändert: 2021/09/18 19:16 (Externe Bearbeitung)