对于Lua函数警报信息 [英] Alert messages for lua functions

查看:113
本文介绍了对于Lua函数警报信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的code:

  lua_getglobal(L,LGD);lua_getfield(L,-1,value_pos_x);
CR-> value_pos_x = lua_tointeger(L,-1);如果(!lua_isinteger(L,-1))
    的printf(value_pos_x只允许数;);lua_getfield(L,-2,value_pos_y);
CR-> value_pos_y = lua_tointeger(L,-1);如果(!lua_isinteger(L,-1))
    的printf(value_pos_y只允许数;);lua_getfield(L,-3,时间);
    CR->时间= lua_tointeger(L,-1);如果(!lua_isinteger(L,-1))
    的printf(时间只允许数字;);

在code完美的作品。我想知道,如果有可能的问题,只保留一个消息,并且将适用于每一个功能,例如:

  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,时间);
CR->时间= lua_tointeger(L,-1);如果(lua_tointeger(L,-1)!= lua_isinteger(L,-1))
        的printf(下的条目%s是无效的;capture_lua_getfield_name);


解决方案

宏是这样的(未经测试并写入SO编辑框):

 的#define GET_INTEGER_WARN(IND,FLD)做{\\
    lua_getfield(L,诱导,#fld); \\
    CR-> FLD = lua_tointeger(L,-1); \\
    \\
    如果(!lua_isinteger(L,-1))\\
        的printf(#fld只允许数字;); \\
    }而(0)

会让你做这样的事情:

  lua_getglobal(L,LGD);GET_INTEGER_WARN(-1,value_pos_x);GET_INTEGER_WARN(-2,value_pos_y);GET_INTEGER_WARN(-3,时间);

这样的功能(同样告诫如前):

  lua_Integer
get_integer_warn(lua_State * L,INT IND,字符* FLD)
{
    lua_getfield(L,诱导,FLD);    如果(!lua_isinteger(L,-1))
        的printf(%S只允许数字,FLD);    返回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-GT&;时间= get_integer_warn(L,-3,时间)

I have the following code:

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 allows only numbers;");

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

if (!lua_isinteger(L, -1))
    printf("value_pos_y allows only numbers;");

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

if (!lua_isinteger(L, -1))
    printf("time allows only numbers;");

The code works perfectly. The question I wanted to know if it is possible to keep only one message and that would apply to each function for example:

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("The entry %s is invalid;", capture_lua_getfield_name);

解决方案

A macro something like this (untested and written in SO editing box):

#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)

Would let you do something like this:

lua_getglobal(L, "lgd");

GET_INTEGER_WARN(-1, value_pos_x);

GET_INTEGER_WARN(-2, value_pos_y);

GET_INTEGER_WARN(-3, time);

A function like this (same caveats as before):

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);
}

Would let you do something like this:

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")

这篇关于对于Lua函数警报信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆