Jump to content

  • Log In with Google      Sign In   
  • Create Account

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


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 janta   Members   -  Reputation: 345

Like
0Likes
Like

Posted 01 August 2012 - 01:29 PM

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

Sponsor:

#2 e‍dd   Members   -  Reputation: 2105

Like
0Likes
Like

Posted 01 August 2012 - 01:33 PM

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...

Edited by e‍dd, 01 August 2012 - 01:35 PM.


#3 janta   Members   -  Reputation: 345

Like
0Likes
Like

Posted 01 August 2012 - 02:04 PM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS