【发布时间】:2016-02-12 16:03:19
【问题描述】:
我有以下代码:
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;");
代码完美运行。我想知道是否可以只保留一条消息并且适用于每个功能的问题,例如:
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);
【问题讨论】:
-
我不明白这个问题。您当然可以编写一个“帮助”函数来减少这些行中的重复以获取“整数”值,但这并不完全是它的样子。
-
为了更好地理解而编辑的主题,我打算做的是一条消息,说 lua_tointeger 只接受数字,例如,如果我使用字符串或布尔值,它会显示警报消息。
-
是的,您希望能够轻松处理少量“整数”值并在它们无效时发出警报。您可以轻松地将现有代码重构为一个帮助函数,它可以让您这样做,而不是每次都复制整个行集。你有没有尝试过?我不确定你认为
lua_tointeger() != lua_isinteger()会为你做什么(因为它们分别返回一个lua_Integer和一个布尔值int),但是检查你得到一个有效的整数肯定是可能的。 -
我该怎么办?通过检查仅发生在
lua_getfield (L, -3, "time");中,其他两个无法阅读该消息。另一个问题是如何捕获 lua_getfield 名称,例如:The entry value_pos_x is invalid; -
宏可以按原样替换这些行(并且还包括最后的行和错误消息)。一个函数可以替换除赋值之外的所有内容(这可以通过函数的返回值或类似方法来完成)。