2017-06-06 273 views
3

我想与同事分享lua模块。为了获得最新版本的共享模块,我想要使用Web服务器来存储和获取它们。执行lua字符串作为lua代码

我的问题是:

是否有可能直接从http请求或串加载Lua代码?

我想达到这样的事情:

module = [[ 
    local sharedModule = {} 
    function sharedModule.greet(name) print("hello " .. name) end 
    return sharedModule 
]] 
greeter = require (module) 
greeter.greet("john") 

也许这是不正确的事情。有没有比这更好的方法?

+4

您正在寻找['load'](https://devdocs.io/lua~5.3/index#pdf-load)。不过,我建议在内部托管模块,并让用户相应地下载/安装它。 – hjpotter92

+0

@ hjpotter92感谢您的快速回复。并感谢您的建议。我将在访问lua模块之前设置安全检查 –

回答

2

a whole section编程在Lua致力于此。您的需求将直接通过loadstring完成。

虽然我会仔细验证你正在执行的代码。至少,它的版本(运行错误的版本最有可能会导致各种问题,如果运行的代码取决于处于特定状态的环境)。优化校验和并对代码进行签名,并在做任何事之前验证签名。如果你的环境不受保护,这实质上是一个巨大的后门开放。

您也可以使用rings库来隔离您正在运行的代码之内的Lua环境本身。它可能不是密闭式的安全方式,但至少应该防止接收到的代码在应用程序出错时将应用程序崩溃。