Skip to main content
GameDev.net gamedev.net
🔒 Locked

[LUA] create a function, then assign it to a variable

Started by janta Aug 1, 2012 at 7:29 PM 1 replies 1.9k views
Original Post
janta
janta
Hi
I am a Lua beginner, and I have a problem.
I want to let my users (designers) create some Lua functions, but I want to keep track of the function they create

So for example, I dont want them to give me this:

"function SayHello() print('hello') end"

I want them to give me these
- name: SayHello
- body: function () print('hello') end

And do along the lines like

luaL_loadstring(body);
lua_setglobal(L, name);

But this won't work because the function's body does not compile on its own.

Is there another way for me to do that, besides manually formatting the script like

sprintf(buffer, "%s =%s", name, body)

Thank you for your help
the_edd
the_edd
SayHello = function() print('hello') end

But this is more or less semantically identical to:

function SayHello() print('hello') end

It might be worth getting to know Lua a bit better before deciding on just how you're going to expose a scripting interface, as you might miss a few tricks...
janta
janta
I did know that, I think I just didn't explain myself well.

Anyway I found this: http://stackoverflow...ion-in-lua?rq=1
And the poster had about the same question as me.

It turns out that returning the function chunk does the trick.

My data therefore is like this

  • body = "return function (msg) print(msg) end"
  • name = "print_message"

    And my (pseudocode) is like this


    void CreateFunc(char* name, char* body)
    {
    // verify if the function already exists
    assert(!funcs.contains(name));

    luaL_loadstring(L, body);
    lua_pcall( L, 0, 1, 0 );
    lua_setglobal(L, name);

    funcs.insert(name)
    }


    I'm open to other suggestion or remarks of course

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.