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!


Log in to reply