如何在 C 语言中获取 Lua 函数的复杂参数?

我的 Lua 函数会调用 C 函数,其中一个非常复杂,如下所示,如何在 C 中获取所有参数?参数 colors 是一个由 {color, x, y} 结构类型元素组成的数组,其中元素数量不确定。参数 region 是一个 {x, y, width, height} 结构类型。

点赞
用户234175
用户234175

我会将pixel_t的处理逻辑从Lua表中分离出来,单独创建一个函数,以使代码更易理解和使用。这个函数就像lua_topixel_t,遵循Lua的C API签名约定:

bool lua_topixel_t(lua_State *L, int t, pixel *p)
{
  if (lua_type(L, t) != LUA_TTABLE) return false;
  if (!p) return false;

  int i = 0;
  lua_rawgeti(L, t, ++i);
  p->color = lua_tointeger(L, -1);
  lua_rawgeti(L, t, ++i);
  p->x = lua_tointeger(L, -1);
  lua_rawgeti(L, t, ++i);
  p->y = lua_tointeger(L, -1);

  lua_pop(L, i);
  return true;
}

现在只需要在findColorsProxy中使用它就可以了:

pixel_t *ps = (pixel_t *) malloc(sizeof(pixel_t) * colors_count);
for (int i = 0; i < colors_count; lua_pop(L, 1))
{
  // ..., -3 = colors, count, region
  lua_rawgeti(L, -3, ++i);
  // ..., colors, count, region, -1 = color[i]
  if (!lua_topixel_t(L, -1, &ps[i - 1]))
  {
    free(ps); return 0;
  }
}
// ...

请注意,我不确定Lua端如何表示RGB颜色,因此这里我假设它是一个整数。如果表示方式不同,比如是一个Lua字符串,那么就要相应修改lua_topixel_t函数了。

2014-12-20 21:47:15