Hatena::Grouptenmon

ひこにっき

 | 

2011.07.28

lua_next

12:41

lua_pushnil(L); // <- 最初のkeyとしてnilを積む
while ( lua_next(L, t) != 0 ) { // -> stackにkeyとvalueが積まれる
    // ...
    lua_pop(L, 1); // <- stackからvalueだけpopする
}
lua_pop(L, 1); // <-- ここについて

最初にnilを足し、lua_nextもkeyを残すので、何となく、上のように最初に足したnilもしくはlua_nextで残っているkeyをpopしなきゃならないのかな、と思ったけれど、実際動かすと一つ余計にpopされてしまう。

http://pgl.yoyo.org/luai/i/lua_next

この解説を先に見てればなぁ。

lua_nextは、「keyをいったんpopしてから、次のペアがあればkeyとvalueをpushする」みたいな動きをするらしい。なので、次のペアがないときは、「何もしない」ではなくて、「keyがpopされる」となる。従って現実には、最後にpopする必要はない。

トラックバック - http://tenmon.g.hatena.ne.jp/aql/20110728
 |