Hallo zusammen,
ich bin blutiger Lua Anfänger, habe zwar grundlegende Programmierkenntnisse aus c perl oder java..
ich hab ein Problem mit meiner rekursiven Funktion.
ich übergebe der search funktion eine table und einen sting mit einem blätter-pfad und möchte das Element/sub-table zurückbekommen welche ich anfrage.
Code:
--
function search(tab, str)
local a, b, c = string.match(str, '(%w+)(%.([%w%.]+))')
if(a == nil) then
print(tab[str]) -- "101"
return (tab[str])
else
search(tab[a],c)
end
end
local t = {["foo"] = {
["bar"] = {
["hallo"] = "101"
}
}
}
local string = "foo.bar.hallo"
local result = search(t,string)
print(result) -- "nil"
Für jeden Knoten (getrennt durch "." im String) wird rekursiv eine Ebene tiefer in die Table gewechselt bis das letzte Element/sub-table gefunden wurde und dieses zurückgegeben wird.
Innerhalb der search Funktion ist die Ausgabe auch korrekt.
Allerdings wird beim return das Ergebnis nicht übernommen so das nil in der Ausgabe erscheint :/
Gebe ich nur "foo" als string ein, funktioniert die Rückgabe und ich bekomme die sub-table korrekt zurück
Daher denke ich es liegt an der Rekursion bzw dem Call-by-reference, leider kenne ich mich zu wenig in lua aus um das Problem selbst zu lösen
Ich danke euch schon mal im Voraus für die Hilfe und Bemühungen.
Gruß
MegaChroniX
Zum Hintergrund:
Ich möchte eine einfache Internationalisierung bauen, über welche mit translate("foo.bar") ein bestimmtes Label zurückgegeben wird.
Die Label sollen in einer table gespeichert werden