对于Lua函数警报信息 [英] Alert messages for lua functions
本文介绍了对于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屋!
查看全文