• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Tabelle aus Tabellennamen ermitteln und übergeben

Ich habe eine Funktion getWinner(tbl) geschrieben, die als Argument eine von mehreren gleich strukturierten Tables bekommt. Die Tables heissen tbl_race_1, tbl_race_2 usw.

Nun möchte ich das ganze etwas parametrisieren. In Abhängigkeit einer Zählervariablen möchte ich die richtige Tabelle übergeben. Dafür habe ich mir in Urwigo eine String-Variable var_racecount_tablename angelegt, welche ich nach dem inkrementieren der Zählervariable neu setze. Also wenn Zähler = 1 dann var_racecount_tablename = "tbl_race_1" usw. (dafür gibt es auch eine Funktion, die funktioniert aber soweit).

Jetzt habe ich versucht getWinner so aufzurufen:
Code:
getWinner(var_racecount_tablename)
Nach einigem Studieren war mir das Problem dann auch klar: Geht nicht, weil getWinner ein Table und keinen String möchte.

Kann mir hier jemand den Knopf im Hirn lösen, wie ich das zum Laufen bekomme? Vielen Dank schon mal.
 

Charlenni

Geomaster
Oh, doch etwas zu kurz. tab sollte auch als Tabelle initialisiert werden.
Code:
tab = {}
Du kannst dann aber auch gleich
Code:
tab = {tab_race_1, tab_race_2, tab_race_3}
schreiben. Dann als Zeiger eine numerische Variable verwenden (in diesem Fall 1 <= Variable <= 3). Dann kann auf das richtige Element mit tab[Variable] zugegriffen werden.
 
OP
W

whiterussian_ch

Geocacher
Danke für die rasche Antwort. Dass in der ersten Version noch die Defintion von tab gefehlt hat, hatte ich fast vermutet.

Ich habe folgendes gemacht, direkt nach der Definition und Initialisierung von tab_race_1 und tab_race_2 in meiner externen Lua-Datei:
Code:
tab = {tab_race_1, tab_race_2}

Aufruf dann (mal mit fixem Index, weil die Zähler-Variable nicht funktioniert hat):
Code:
getWinner(tab[1])

Resultat:
Crash.jpg

Hast du eine Idee, woran das liegen könnte?
 

Charlenni

Geomaster
Es sieht so aus, als ob an dieser Stelle (an der Du auf tab zugreifst), tab unbekannt ist. Und damit ist tab dann nil und Du kannst nicht mit einem Index darauf zugreifen.

Überprüfe, wo Du tab definierst und wo Du darauf zugreifst.
 
OP
W

whiterussian_ch

Geocacher
Ich habe es auch nach längerem hin und her nicht geschafft.

Neuer Ansatz, der funktioniert (vielleicht etwas "billig", aber es funktioniert): getWinner hat neu als Argument die Zählervariable, dann ein simples if/else zum setzen der lokalen Table.
Code:
    local tbl = {}
    if racecount == 1 then
        tbl = tbl_race_1
    elseif racecount == 1 then
        tbl = tbl_race_2
    end

Trotzdem: Ich bin immer froh, wenn ich hier so rasch Hilfe bekomme, vielen Dank!
 
Oben