Lua - attempt to compare function with number



  • Ziemlich...

    int GetMoney(lua_State* L)
    {
        int iParamCount = lua_gettop(L);
        if (iParamCount==0)
        {
            lua_pushnumber(L, int(dMoney));
        }
        lua_pop(L, lua_gettop(L));
        return 1;
    }
    

    oder habe ich etwa hier einen Fehler gemacht?

    Danke für dein Interesse an meinem Problem 👍

    MfG



  • Dumme Frage: sagt return 1 nicht, daß da ein Fehler aufgetreten ist? Was passiert, wenn 0 zurückgegeben wird?

    Gruß Kimmi



  • Hi, danke für die Antwort.

    Nein, in Lua anscheinend nicht, im verlinkten Tutorial steht, dass hier das return angiebt, wieviele Werte zurückgegeben werden.

    MfG



  • Debug doch mal in den Code beziehungsweise bepflaster das Ganze mit printf, um zu sehen, ob der lua_pushnumber Befehl durchgeführt wurde. So auf die Schnelle sehe ich auch keinen Fehler.

    Gruß Kimmi



  • Magellan schrieb:

    Ziemlich...

    int GetMoney(lua_State* L)
    {
        int iParamCount = lua_gettop(L);
        if (iParamCount==0)
        {
            lua_pushnumber(L, int(dMoney));
        }
        lua_pop(L, lua_gettop(L));
        return 1;
    }
    

    oder habe ich etwa hier einen Fehler gemacht?

    Danke für dein Interesse an meinem Problem 👍

    MfG

    Für mich sieht das so aus, als ob du den Rückgabewert auf den Stack legst und ihn direkt wieder runterholst (der lua_pop Aufruf).
    Als Rückgabewert wird dann das genommen, was auch immer grad oben auf dem Stack liegt. In dem Fall müsste es die Funktion sein, die aufgerufen wird.

    Versuchs mal mit

    int GetMoney(lua_State *L)
    {
      lua_pushnumber(L, int(dMoney));
      return 1;
    }
    


  • int GetMoney(lua_State* L)
    {
        int iParamCount = lua_gettop(L);
        if (iParamCount==0)
        {
            lua_pushnumber(L, int(dMoney));
        }
        lua_pop(L, lua_gettop(L));
        return 1;
    }
    

    Dumme Frage: sagt lua_pop(L, lua_gettop(L)); nicht, dass der Stack leer gemacht wird? Damit ist doch auch direkt der Rückgabewert, der vorher gepusht wird, weg, oder nicht?



  • Ich muss sagen, ich habe noch nie mit der Lua-API gearbeitet und hab jetzt nur flüchtig im Referenzmanual geguckt, kann also sein, dass ich jetzt völlig daneben liege. Aber so wie ich das verstanden habe, bewirkt

    lua_pop(L, lua_gettop(L));
    

    dass alle Elemente vom Stack gelöscht werden (lua_gettop gibt die Anzahl zurück, lua_pop löscht n Elemente). Demnach wäre der Rückgabewert nil oder undefiniert oder die Funktion selbst oder irgendwie sowas, da kenn ich mich nicht genug aus.

    Edit: hm, zu spät...



  • Und gleich dreimal die Lösung!

    Ich muss zuerst lua_pop verwenden um die Parameter zu löschen und dann den Rückgabewert auf den Stack schieben.

    Danke euch allen 🙂



  • Magellan schrieb:

    Und gleich dreimal die Lösung!

    Ich muss zuerst lua_pop verwenden um die Parameter zu löschen und dann den Rückgabewert auf den Stack schieben.

    Danke euch allen 🙂

    Bist du dir sicher, dass man die Parameter selber löschen muss?
    In Programming in Lua wird das nicht gemacht.
    Der Stack existiert so weit ich mich erinnern kann nur für den Funktionsaufruf und wird danach sowieso wieder gelöscht.

    Edit:

    When a C function returns, Lua clears its stack;

    http://www.lua.org/pil/24.2.2.html vorletzter Abschnitt.

    Stack löschen würde ich nur, wenn du in der Funktion den Platz dringend brauchst.



  • Der Stack braucht nicht geloescht werden!


Anmelden zum Antworten