Как правильно печатать сообщения об ошибках из `luaL_dostring ()`? - PullRequest
1 голос
/ 21 мая 2019

Вот мой код, который запускает скрипт Lua в виде строки.

bool doString(const char *s)
{
    const int ret = luaL_dostring(L, s);
    if (ret)
    {
        if (ret == LUA_ERRSYNTAX)
            printf("Error: %s", lua_tostring(L, -1));
        else if (ret == LUA_ERRMEM)
            printf("Error: memory error");
        else
            printf("Error: syntax error");
        return false;
    }
    return true;
}

Но во многих случаях мой код просто печатает Error: syntax error без дальнейшего описания того, где происходит ошибка.

Как правильно распечатать сообщения об ошибках, чтобы они были более наглядными?

1 Ответ

2 голосов
/ 21 мая 2019

luaL_dostring возвращает LUA_OK /* 0 */ при успехе и 1 при ошибке [1].Когда это терпит неудачу, это помещает сообщение об ошибке в стек, описывающий проблему.Это можно определить, следуя от luaL_loadstring до lua_load в документах [2].Кроме того, luaL_dostring вызывает lua_pcall, который также помещает объект ошибки в стек при сбое (без установленного обработчика) [3]

Когда вы получаете ненулевой результат, вы можете проверить верхнюю частьстек для сообщения об ошибке и выведите его:

bool doString(const char *s) {
    const int ret = luaL_dostring(L, s);

    if (ret != LUA_OK) {
      printf("Error: %s\n", lua_tostring(L, -1));
      lua_pop(L, 1); // pop error message
      return false;
    }

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...