सी

2014-10-30 5 views
5

में लुआ टेबल आकार प्राप्त करें मैं सी में लूआ टेबल का आकार कैसे प्राप्त कर सकता हूं?सी

static int lstage_build_polling_table (lua_State * L) { 
    lua_settop(L, 1); 
    luaL_checktype(L, 1, LUA_TTABLE); 
    lua_objlen(L,1); 
    int len = lua_tointeger(L,1); 
    printf("%d\n",len); 
    ... 
} 

मेरे लुआ कोड:

local stages = {} 
stages[1] = stage1 
stages[2] = stage2 
stages[3] = stage3 

lstage.buildpollingtable(stages) 

यह है 0 हमेशा मुद्रण। मैं क्या गलत कर रहा हूं?

+0

"तालिका का आकार" उपयोग करने के लिए एक अजीब शब्द है। यदि तालिका में मैन्युअल में परिभाषित अनुक्रम है, अन्यथा अनिश्चित है, तो आपको तालिका (संभवतः 0) में अनुक्रम की लंबाई मिल रही है। –

उत्तर

5

lua_objlen ऑब्जेक्ट की लंबाई देता है, यह स्टैक पर कुछ भी धक्का नहीं देता है।

भले ही उसने स्टैक पर कुछ धक्का दिया हो, फिर भी lua_tointeger कॉल तालिका की अनुक्रमणिका का उपयोग कर रहा है और जो कुछ भी lua_objlen स्टैक पर धक्का नहीं दिया होता है (यदि यह पहले स्थान पर कुछ भी धक्का देता है), जो यह नहीं करता है)।

आप lua 5.1 के लिए size_t len = lua_objlen(L,1); चाहते हैं।

या size_t len = lua_rawlen(L,1); lua 5.2 के लिए।

+1

दरअसल, प्रकार 'size_t' है। इसके अलावा, चूंकि लुआ 5.2 नाम 'lua_rawlen' है: http://www.lua.org/manual/5.2/manual.html#lua_rawlen – Deduplicator

+0

अद्भुत! धन्यवाद @ एतान !! – Crasher

4

आपके द्वारा दिए गए कोड में, के साथ lua_objlen(L,1) को प्रतिस्थापित करें।

lua_objlen और lua_rawlen लंबाई वापस करें और इसे ढेर पर न छोड़ें।

lua_len कुछ भी नहीं लौटाता है और ढेर पर लंबाई छोड़ देता है; यह मेटामाइड्स का भी सम्मान करता है।