通过电话由C

问题描述:

一个Lua脚本给定一个LUA文件中像通过电话由C

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

我怎样才能加载该文件与C API调用和返回的函数返回的功能? 我只需要以luaL_loadfile/luaL_dostring开头的函数调用。

A 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)); 
} 
+0

啊,谢谢,这是一个非常有用的'块'语义。实际上,到目前为止,我尝试过的其中一个版本是相似的,只不过我第一次打电话是'lua_pcall(L,0,0)',它丢弃了结果。这让我想知道为什么没有回报价值。 –