#lua #module #tree #source #binary-tree #applications #embedding

include-lua

一个允许将 lua 源树嵌入到 Rust 应用程序二进制文件中的 crate

5 个版本

0.1.4 2019 年 6 月 8 日
0.1.3 2019 年 4 月 1 日
0.1.2 2019 年 3 月 29 日
0.1.1 2019 年 3 月 29 日
0.1.0 2019 年 3 月 29 日

数据结构 中排名第 2055

每月下载 41

MIT 许可证

6KB
60

include-lua

include-lua 是一个 crate,它允许将 lua 源树嵌入到 Rust 应用程序二进制文件中。然后可以将此树加载到 rlua 上下文中,并通过 require 从它导入代码。

基本用法

首先,通过宏 include_lua! 创建一个 LuaModules 结构体的实例。此宏接受一个字符串字面量参数,指定一个目录,相对于你的 crate 的 src 文件夹。此目录及其子目录中的所有 .lua 文件都将作为可加载模块包含在内。

一旦创建了 LuaModules 结构体,就可以通过调用 ctx.add_modules(modules) 将它导入到 rlua::Context 中。这是一个由 trait 提供的扩展方法,所以请确保你的代码中有 use include_lua::*; 语句。一旦调用,该上下文中执行的任何 require 调用都将能够从嵌入的源树中加载模块。

高级用法

可以为 LuaModules 结构体指定一个名称,该名称将出现在其内部的任何代码的堆栈跟踪中。只需像这样调用 include_lua 宏:include_lua!("name": "path"),而不是仅仅 include_lua!("path")

如果您出于某种原因需要在自定义环境中加载模块,而不是使用ctx.add_modules,您可以调用ctx.add_modules_with_env(modules, env),其中env是一个表格,它将用作源树中所有模块的_ENV值。

还提供了ctx.make_searcher(modules)ctx.make_searcher_with_env(modules, env)方法。它们生成一段用户数据,在Lua代码中,它像一个函数一样通过名称从源树加载模块。

作为底层方法,make_searchermake_searcher_with_env返回的值不缓存模块,如require。这意味着,如果您想避免使用相同名称的多次调用加载相同模块的多个副本,您将必须在Lua代码中实现一个包装器。

示例

请参阅example/main.rs以获取宏使用的工作示例。

注意事项

目前,此crate不支持包含非Unicode字符的路径。任何这些路径下的文件都将从include_lua!调用中省略。

依赖关系

~2.2–9.5MB
~93K SLoC