2012-07-13 47 views
1

你好,我真的爲這個看似簡單的任務難住。 我可以訪問傳遞給C函數的表的屬性,但不能訪問我在其中創建的任何子表的成員。如何從C中的lua訪問多維表?

基本上我想簡單地能夠從屬性表中提取字符串,所以我可以根據用戶的期望創建一個「輪子」。

這裏是我到目前爲止(試過這麼多我的大腦是炒)

的Lua方:

--Function 
createSomething("wheel", { canInflate = true, properties = { "large", "full" } }) 

C面:

//I can retrieve any value easily within that table, but cannot seem to extract the table 
//Within it named "properties", i can access the table, but cannot extract the strings  inside 

if(lua_istable(L, 2)) { 
    lua_getfield(L, 2, "canInflate"); // Let's extract the value for the key 'someKey'. Pushes the value on the top of the stack 
    static int canInflate = lua_toboolean(L, -1); // get the value of bool now at the top of stack (index: -1) 

    //printf("can inflate is %d\n", canInflate); 
    //lua_pop(L, 1); // pop the value now that we are done with it 
} 


//try to get the properties table 
if (lua_istable(L, 2)) { 
    lua_getfield(L, 2, "properties"); 

    const char *str = lua_tostring(L, -1); 

    printf("properties 1 = %s\n", str); // NULL 

    lua_pop(L, 2); 
} 

任何幫助的這將不勝感激

回答

3

您遇到的問題是你如何在Lua指定表:以下3個語句具有完全相同的結果:

t = { 'full','large'} 
t = { [1] = 'full', [2] = 'large'} 
t={};t[1]='full';t[2]='large' 

你需要的是用字符串作爲鍵而不是值(如完成在你的代碼和上面的例子中):

t={full=true,large=true} 
-- or 
t={}; t.full=true; t.large=true 

如果你使用字符串作爲鍵你的C代碼應該工作。

+0

事實上,工作,謝謝一堆!知道這是簡單的 – PersuitOfPerfection 2012-07-13 14:47:52

+2

@丹:然後接受這個答案,如果它解決了你的問題。這是左邊的綠色複選標記。 – 2012-07-13 16:04:07