Hallo Leute,
ich habe derzeit ein kleines Problem.
Wenn ich eine Table habe, welche die Instanzen von Klassen sammelt und zwei Einträge miteinander tauschen möchte, habe ich das Problem, dass ich einen Stack-Overflow bekomme.
Warum liegt auf der Hand.
Jedoch möchte ich mal nachfragen, ob es von Haus aus so eine Funktion gibt, welche zwei Einträge miteinander tauscht.
Meine Funktionen:
function table.copy(tab)
local ret = {}
for key, value in pairs(tab) do
if (type(value) == "table") then ret[key] = table.copy(value)
else ret[key] = value end
end
return ret
end
function table.swap(tab, itemIndexA, itemIndexB)
checkArgs("table.swap", "table", "number", "number")
if tab[itemIndexA] and tab[itemIndexB] then
local tempIndex = (type(tab[itemIndexA]) == "table") and table.copy(tab[itemIndexA]) or tostring(tab[itemIndexA])
tab[itemIndexA] = tab[itemIndexB]
tab[itemIndexB] = tempIndex
return true
else
return false
end
end
Alles anzeigen
Der Stackoverflow entsteht durch die table.copy Funktion.
Warum es passiert ist wohl logisch.. -> diese Rekursion geht bei Klassen die auf sich selbst zeigen nicht.
Nur das es vorab gesagt ist.. die Methoden funktionieren, insofern man nicht mit Klassen hantiert.
Wie auch immer, hätte jemand einen Rat wie ich die tausche?
@MrX: oder @Jusonex: hat sicherlich einen Rat!