Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read complex lua table using c code

Tags:

c

lua

lua-5.4

I'm starting in the world of lua currently I'm creating table readings using C code

I have a table that looks like this:

Consume = 
{
    Consume_first = {
        Value = 100
        Request = 200
    },
    Require_var = {
        Enable= true
        Name = "Am"
    
    }
}

I would like to know some information

Consume is defined as lua_getglobal(L, "Consume");

Value, Request, Enable and Name would the lua_getfield function be used?

Example:

lua_getfield(L, 1, "Value")

And in Consume_first and Require_var what should I use to define them?

My code:

void read_table(void) {
    lua_State *L;
    L = luaL_newstate();
    luaL_openlibs(L);

    if (luaL_loadfile(L, "table.lua") || lua_pcall(L, 0, 0, 0))
    {
        ShowError("Error reading 'table.lua'\n");
        return;
    }

    lua_getglobal(L, "Consume");
    .... 
    lua_getfield(L, -1, "Value");
    lua_getfield(L, -1, "Request");
    ....
    lua_getfield(L, -1, "Enable");
    lua_getfield(L, -1, "Name");

    lua_close(L);
    printf("Read Table complete.\n");

}

I'm using lua 5.4

like image 806
Michael Avatar asked May 13 '26 21:05

Michael


1 Answers

Something like this:

lua_getglobal(L, "Consume");

// Get Consume.Consume_first
lua_getfield(L, -1, "Consume_first");

// Get Consume.Consume_first.Value
lua_getfield(L, -1, "Value");

// Get Consume.Consume_first.Request
// Note that currently Consume.Consume_first.Value is on the stack
// So Consume.Consume_first is at index -2
lua_getfield(L, -2, "Request");

If you are confused with the index, you can also use lua_gettop to help.

lua_getglobal(L, "Consume");

// Get Consume.Consume_first
lua_getfield(L, -1, "Consume_first");
int Consume_first_index = lua_gettop(L);

// Get Consume.Consume_first.Value
lua_getfield(L, Consume_first_index, "Value");

// Get Consume.Consume_first.Request
lua_getfield(L, Consume_first_index, "Request");
like image 188
shingo Avatar answered May 16 '26 12:05

shingo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!