【问题标题】:How to access multidimensional table from lua in C?如何从C中的lua访问多维表?
【发布时间】:2012-07-13 09:16:51
【问题描述】:

你好,我真的被这个看似简单的任务难住了。 我可以访问传递给 C 函数的表的属性,但不能访问我在其中创建的任何子表的成员。

基本上,我只想能够从属性表中提取字符串,这样我就可以根据用户的期望创建一个“轮子”。

这是我到目前为止所拥有的(尝试了这么多我的大脑被炸了)

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);
}

对此的任何帮助将不胜感激

【问题讨论】:

    标签: c lua luac


    【解决方案1】:

    您遇到的问题是如何在 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 代码应该可以工作。

    【讨论】:

    • 确实有效,非常感谢!知道这很简单
    • @Dan:如果它解决了您的问题,请接受此答案。那是左边的绿色复选标记。
    猜你喜欢
    • 2023-03-08
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2014-11-10
    • 2017-12-08
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多