Ergebnis 1 bis 6 von 6

Thema: Rekursive Funktion gibt nil statt Wert zurück

  1. #1

    Standard Rekursive Funktion gibt nil statt Wert zurück

    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
    Geändert von megachronix (24.01.2017 um 14:03 Uhr)

  2. #2
    Avatar von Scarecrow
    Registriert seit
    15.12.2005
    Ort
    Nordrhein-Westfalen

    Standard AW: Rekursive Funktion gibt nil statt Wert zurück

    Bei der Zuweisung

    Code:
    local a, b, c = string.match(str, '(%w+)(%.([%w%.]+))')
    bekommt nur a den Wert. b und c sind nil. Ist das gewollt?
    "Das hat nichts mit Markttechnik zu tun."

  3. #3

    Standard AW: Rekursive Funktion gibt nil statt Wert zurück

    Zitat Zitat von Scarecrow Beitrag anzeigen
    Bei der Zuweisung

    Code:
    local a, b, c = string.match(str, '(%w+)(%.([%w%.]+))')
    bekommt nur a den Wert. b und c sind nil. Ist das gewollt?
    ja ist gewollt, die pattern suchen nach einem string in dem ein oder mehrere punkte vorkommen und zerteilen ihm am ersten punkt.
    ist nur ein "knoten" ohne punkt gegeben sind a,b,c nil da nicht gematched wird.

    das ist dann die abbruchbedingung für die funktion und man hat den letzten "knoten" erreicht.
    es sollten dadurch (hoffe) alle möglichen längen abgedeckt werden
    von
    foo
    foo.bar
    foo.bar.hallo ...[...] usw. je nachdem wie tief die table ist



    EDIT:
    die Antwort ist genau so dämlich wie simplel...
    Code:
    if(a == nil) then
        print(tab[str])  -- "101"
        return (tab[str])
      else
        return search(tab[a],c)
      end
    ich hab ein return vergessen xD
    Geändert von megachronix (24.01.2017 um 14:33 Uhr)

  4. Folgender Benutzer sagt Danke zu megachronix für den nützlichen Beitrag:


  5. #4
    Avatar von Scarecrow
    Registriert seit
    15.12.2005
    Ort
    Nordrhein-Westfalen

    Standard AW: Rekursive Funktion gibt nil statt Wert zurück

    Ouha

    Benutzt du eine IDE oder mehr sowas wie Notepad++ zum Schreiben deiner Scripts?
    "Das hat nichts mit Markttechnik zu tun."

  6. #5

    Standard AW: Rekursive Funktion gibt nil statt Wert zurück

    eclipse mit lua plugin

  7. #6

    Standard AW: Rekursive Funktion gibt nil statt Wert zurück

    Den hab ich auch so schnell nicht gesehen.
    Das schlimme daran ist ja, das alle gängigen LUA-Interpreter dir auch keinen Fehler melden würden. Es ist in LUA halt möglich Funktionen zu schreiben die nicht auf allen möglichen wegen einen Wert zurückgeben.
    Website: monky-town.de

    WildStar
    Server: Kazor
    Seite: Verbannte
    Char: Monkii (Arkanschütze)

Ähnliche Themen

  1. Table - attempt to index a nil value
    Von DasNeo im Forum Lua
    Antworten: 8
    Letzter Beitrag: 06.07.2014, 23:45
  2. Dem client eine Table schicken
    Von Mario im Forum Lua
    Antworten: 6
    Letzter Beitrag: 01.04.2010, 00:10
  3. [LUA] Table mit leerzeichen?
    Von 4ndy im Forum Lua
    Antworten: 4
    Letzter Beitrag: 04.01.2010, 22:57
  4. Server returned version -24264, expected 7.
    Von stefan1994 im Forum Hilfe & Support
    Antworten: 9
    Letzter Beitrag: 23.08.2008, 14:57
  5. Namen mit table vergleichen
    Von Stoned im Forum Lua
    Antworten: 5
    Letzter Beitrag: 27.07.2008, 18:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •