Lua函数的警报消息

我有以下代码:

lua_getglobal(L, "lgd");

lua_getfield(L, -1, "value_pos_x");
cr->value_pos_x = lua_tointeger(L, -1);

if (!lua_isinteger(L, -1))
    printf("value_pos_x只允许数字;");

lua_getfield(L, -2, "value_pos_y");
cr->value_pos_y = lua_tointeger(L, -1);

if (!lua_isinteger(L, -1))
    printf("value_pos_y只允许数字;");

lua_getfield(L, -3, "time");
cr->time = lua_tointeger(L, -1);

if (!lua_isinteger(L, -1))
    printf("time只允许数字;");

这段代码完美运行。我想知道的问题是,是否可能只保留一个消息,并将其应用于每个函数,例如:

lua_getglobal(L, "lgd");

lua_getfield(L, -1, "value_pos_x");
cr->value_pos_x = lua_tointeger(L, -1);

lua_getfield(L, -2, "value_pos_y");
cr->value_pos_y = lua_tointeger(L, -1);

lua_getfield(L, -3, "time");
cr->time = lua_tointeger(L, -1);

if (lua_tointeger(L, -1) != lua_isinteger(L, -1))
        printf("输入的%s无效;", capture_lua_getfield_name); 
点赞
用户258523
用户258523

一个类似于这样的宏(未经测试并在 SO 编辑框中编写):

#define GET_INTEGER_WARN(ind, fld) do { \
    lua_getfield(L, ind, #fld); \
    cr->fld = lua_tointeger(L, -1); \
    \
    if (!lua_isinteger(L, -1)) \
        printf(#fld" allows only numbers;"); \
    } while (0)

允许您执行以下操作:

lua_getglobal(L, "lgd");

GET_INTEGER_WARN(-1, value_pos_x);

GET_INTEGER_WARN(-2, value_pos_y);

GET_INTEGER_WARN(-3, time);

一个类似于这样的函数(与之前相同的警告):

lua_Integer
get_integer_warn(lua_State *L, int ind, char *fld)
{
    lua_getfield(L, ind, fld);

    if (!lua_isinteger(L, -1))
        printf("%s allows only numbers", fld);

    return lua_tointeger(L, -1);
}

允许您执行以下操作:

cr->value_pos_x = get_integer_warn(L, -1, "value_pos_x")
cr->value_pos_y = get_integer_warn(L, -2, "value_pos_y")
cr->time = get_integer_warn(L, -3, "time")
2015-11-11 16:51:25