lua_getfield的奇怪行为

时间:2011-02-21 11:29:42

标签: c++ lua

我发现了lua_getfield()函数的奇怪行为。请查看此代码片段,该片段应该只从位于堆栈顶部的表中获取字段:

if(lua_istable(L,-1)){
  lua_getfield(L,-1,"field_name");
  int type = lua_type(L,-1);         // returns LUA_TNIL
  int field_value = lua_tointeger(L,-1); // returns 0

  lua_pop(L,1);

  // and now let's try iterating all table's fields:
  lua_pushnil(L);  // first key
  while(lua_next(L, -2) != 0){
    // uses 'key' (at index -2) and 'value' (at index -1)
    CString key = lua_tostring(L,-2);
    int type = lua_type(L,-1);

    if(key == "field_name"){ // 
      int value = lua_tointeger(L,-1); // returns correct value!!!!  (type == LUA_TNUMBER)
      // ????? what the heck ????
    }

    // removes 'value'; keeps 'key' for next iteration
    lua_pop(L, 1);
  }

问题是,为什么lua_getfield()不起作用,而lua_next()工作得很好? 我已经使用过lua_getfield()几十次而没有任何问题,现在我正碰到我的键盘......

reagards 马尔钦

1 个答案:

答案 0 :(得分:1)

问题解决了。调整前一次调用lua_pcall返回的结果数量时出现问题。令我困惑的是,当lua_getfield()miserabely失败时lua_next正常工作的原因......