从C调用lua脚本返回的函数

时间:2016-08-30 18:17:38

标签: lua lua-api

给出像

这样的lua文件
-- foo.lua
return function (i)
  return i
end

如何使用C API加载此文件并调用返回的函数? 我只需要以luaL_loadfile / luaL_dostring开头的函数调用。

1 个答案:

答案 0 :(得分:3)

loaded块只是常规功能。从C加载模块可以这样想:

return (function()  -- this is the chunk compiled by load

    -- foo.lua
    return function (i)
      return i
    end

end)()  -- executed with call/pcall

你所要做的就是加载块并调用它,它的返回值就是你的函数:

// load the chunk
if (luaL_loadstring(L, script)) {
    return luaL_error(L, "Error loading script: %s", lua_tostring(L, -1));
}

// call the chunk (function will be on top of the stack)
if (lua_pcall(L, 0, 1, 0)) {
    return luaL_error(L, "Error running chunk: %s", lua_tostring(L, -1));
}

// call the function
lua_pushinteger(L, 42); // function arg (i)
if (lua_pcall(L, 1, 1, 0)) {
    return luaL_error(L, "Error calling function: %s", lua_tostring(L, -1));
}