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 次
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_searcher
或make_searcher_with_env
返回的值不缓存模块,如require
。这意味着,如果您想避免使用相同名称的多次调用加载相同模块的多个副本,您将必须在Lua代码中实现一个包装器。
示例
请参阅example/main.rs以获取宏使用的工作示例。
注意事项
目前,此crate不支持包含非Unicode字符的路径。任何这些路径下的文件都将从include_lua!
调用中省略。
依赖关系
~2.2–9.5MB
~93K SLoC