【问题标题】:Call a function returned by a lua script from C从 C 调用由 lua 脚本返回的函数
【发布时间】:2017-01-07 03:38:17
【问题描述】:

给定一个像这样的 lua 文件

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

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

【问题讨论】:

    标签: lua lua-api


    【解决方案1】:

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

    【讨论】:

    • 啊,谢谢,“块”的语义非常有用。实际上,到目前为止我尝试过的一个版本是相似的,只是我的第一个电话是lua_pcall(L, 0, 0),它丢弃了结果。这让我想知道为什么没有返回值。
    猜你喜欢
    • 1970-01-01
    • 2018-08-31
    • 2010-11-15
    • 2018-04-23
    • 2018-09-16
    • 1970-01-01
    • 2013-08-24
    • 2021-09-29
    • 2012-01-26
    相关资源
    最近更新 更多