lua_newtable, lua_gettable, lua_rawget, lua_settable, lua_rawset, lua_next, lua_rawgeti, lua_rawseti,
1 lua_newtable
void lua_newtable (lua_State *L);
ºó Å×À̺íÀ» »ý¼ºÇؼ ½ºÅÃÀÇ Á¦ÀÏ À§¿¡´Ù ³õ´Â´Ù.
2 lua_gettable
void lua_gettable (lua_State *L, int index);
Å×ÀÌºí¿¡ µé¾îÀÖ´Â °ª Áß¿¡ Çϳª¸¦ Àоî¿Í¼ ½ºÅà ¸Ç À§¿¡´Ù ³õ´Â´Ù. index °ªÀº Å×À̺íÀÇ À§Ä¡´Ù. Å×ÀÌºí¿¡ ÀÖ´Â °ª Áß, ¾î´À °ÍÀ» »ÌÀ» °ÍÀΰ¡¸¦ Á¤Çϱâ À§Çؼ ½ºÅÃÀÇ Á¦ÀÏ À§¿¡ ÀÖ´Â °ªÀ» Ű·Î »ç¿ëÇϰí, ÆËÇÑ´Ù. ±×·¯¹Ç·Î lua_gettable ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ lua_push... ½Ã¸®Áî Áß¿¡ Çϳª¸¦ È£ÃâÇØ¼ Ű °ªÀ» Ǫ½ÃÇØµÖ¾ß ÇÑ´Ù.
lua_pushnumber(L, 1); // Å×À̺íÀÇ '1' Ű¿¡ ´ëÀÀÇÏ´Â °ªÀ» ¿øÇÑ´Ù.
lua_gettable(L, t); // t´Â Å×À̺íÀÇ À妽º
È£Ãâ ÀüÀÇ ½ºÅà ȣÃâ ÈÄÀÇ ½ºÅÃ
+-------+ +-------+
| key | | value |
+-------+ +-------+
| ... | | ... |
+-------+ +-------+
| ... | | ... |
+-------+ +-------+
ÀÌ ÇÔ¼ö´Â Å×ÀÌºí ¾ÈÀÇ "index" ¸ÞŸ ¸Þ¼µå¸¦ È£ÃâÇÒ ¼öµµ ÀÖ´Ù. ÀÌ °æ¿ì µ¿ÀÛÀÌ ÀüÇô ´Þ¶óÁú ¼ö ÀÖ´Ù. Å×ÀÌºí ¾ÈÀÇ °ª¸¸À» ¿øÇÑ´Ù¸é, lua_rawget ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
3 lua_rawget
void lua_rawget (lua_State *L, int index);
lua_gettable ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î, ÁÖ¾îÁø index À§Ä¡¿¡ ÀÖ´Â Å×À̺íÀÇ °ª Áß¿¡, ½ºÅÃÀÇ ¸Ç À§¿¡ ÀÖ´Â °ªÀ» Ű·Î »ç¿ëÇØ »ÌÀº ´ÙÀ½, ±× °ªÀ» ½ºÅÃÀÇ ¸Ç À§¿¡´Ù ³õ´Â´Ù.
4 lua_settable
void lua_settable (lua_State *L, int index);
½ºÅÿ¡¼ Ű¿Í °ª, Áï 2°³ÀÇ °ªÀ» ÆËÇØ¼, ÁÖ¾îÁø index À§Ä¡¿¡ ÀÖ´Â Å×À̺íÀÇ °ªÀ¸·Î ¼³Á¤ÇÑ´Ù. Áï lua_settable ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ µÎ °³ÀÇ °ªÀ» Ǫ½¬ÇØµÖ¾ß ÇÑ´Ù.
lua_pushnumber(L, key); // ۸¦ Ǫ½¬
lua_pushnumber(L, value); // °ªÀ» Ǫ½¬
lua_settable(L, t); // Å×À̺íÀÇ °ªÀ» ¼³Á¤
È£Ãâ ÀüÀÇ ½ºÅà ȣÃâ ÈÄÀÇ ½ºÅÃ
+-------+ +-------+
| value | | ... |
+-------+ +-------+
| key | | ... |
+-------+ +-------+
| ... | | ... |
+-------+ +-------+
ÀÌ ÇÔ¼ö´Â Å×ÀÌºí ¾ÈÀÇ "settable"°ú "newindex" ¸ÞŸ ¸Þ¼µå¸¦ È£ÃâÇÒ ¼öµµ ÀÖ´Ù. ¼ø¼öÇÏ°Ô °ªÀ» ¼³Á¤Çϱ⸸À» ¿øÇÑ´Ù¸é, lua_rawset ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
5 lua_rawset
void lua_rawset (lua_State *L, int index);
lua_settable ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î ½ºÅÿ¡¼ Ű¿Í °ª, Áï 2°³ÀÇ °ªÀ» ÆËÇØ¼, ÁÖ¾îÁø index À§Ä¡¿¡ ÀÖ´Â Å×À̺íÀÇ °ªÀ¸·Î ¼³Á¤ÇÑ´Ù.
6 lua_next
int lua_next (lua_State *L, int index);
Å×À̺íÀ» Ⱦ´Ü(traverse)Çϱâ À§Çؼ »ç¿ëÇÏ´Â ÇÔ¼ö´Ù. È£ÃâÇÒ ¶§¸¶´Ù ½ºÅÃÀÇ ¸Ç À§¿¡¼ ۸¦ ÆËÇÑ ´ÙÀ½, index À§Ä¡¿¡ ÀÖ´Â Å×À̺íÀÇ Å°¿Í ÇØ´çÇÏ´Â °ªÀ» ½ºÅÿ¡´Ù Ǫ½ÃÇÑ´Ù. ÃÖÃÊ¿¡ Ⱦ´ÜÀ» ½ÃÀÛÇϱâ À§Çؼ´Â nil °ªÀ» Ǫ½ÃÇØµÎ¸é µÈ´Ù. ´õ ÀÌ»ó Ⱦ´ÜÇÒ ½ÖÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é, lua_next ÇÔ¼ö´Â 0À» ¹ÝȯÇÑ´Ù.
È£Ãâ ÀüÀÇ ½ºÅà ȣÃâ ÈÄÀÇ ½ºÅÃ
+-------+ +-------+
| key | | value |
+-------+ +-------+
| ... | | key |
+-------+ +-------+
| ... | | ... |
+-------+ +-------+
´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î Å×À̺íÀ» Ⱦ´ÜÇÒ ¼ö ÀÖ´Ù.
// table is in the stack at index `t'
lua_pushnil(L); // first key
while (lua_next(L, t) != 0)
{
// `key' is at index -2 and `value' at index -1
printf("%s - %s\n",
lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1)));
lua_pop(L, 1); // removes `value'; keeps `key' for next iteration
}
7 lua_rawgeti
void lua_rawgeti (lua_State *L, int index, int n);
Å×À̺íÀ» ¹è¿·Î »ç¿ëÇÏ´Â °æ¿ì¿¡ ÁÖ·Î »ç¿ëÇÏ´Â ÇÔ¼ö´Ù. index À§Ä¡¿¡ ÀÖ´Â Å×À̺íÀÇ n ¹øÂ° ¿ø¼ÒÀÇ °ªÀ» Àоî¿Í, ½ºÅÃÀÇ ¸Ç À§¿¡´Ù Ǫ½¬ÇÑ´Ù. Áï ´ÙÀ½ÀÇ ±¸¹®°ú °°Àº ±â´ÉÀÌ´Ù.
lua_pushnumber(L, n);
lua_rawget(L, index);
8 lua_rawseti
void lua_rawseti (lua_State *L, int index, int n);
Å×À̺íÀ» ¹è¿·Î »ç¿ëÇÏ´Â °æ¿ì¿¡ ÁÖ·Î »ç¿ëÇÏ´Â ÇÔ¼ö´Ù. index À§Ä¡¿¡ ÀÖ´Â Å×À̺íÀÇ n ¹øÂ° ¿ø¼ÒÀÇ °ªÀ» ½ºÅÃÀÇ ¸Ç À§¿¡ ÀÖ´Â °ªÀ¸·Î ¼³Á¤ÇÑ ´ÙÀ½, ÆËÇÑ´Ù. È£ÃâÇϱâ Àü¿¡ ¼³Á¤ÇÒ °ªÀ» Ǫ½¬ÇØ¾ß ÇÑ´Ù.
lua_pushnumber(L, value);
lua_rawseti(L, index, n);
ÀÌ´Â °á±¹ ´ÙÀ½ÀÇ ±¸¹®°ú °°´Ù.
lua_pushnumber(L, n);
lua_pushnumber(L, value);
lua_rawset(L, index);
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)