3个版本
0.1.2 | 2019年3月29日 |
---|---|
0.1.1 | 2019年3月29日 |
0.1.0 | 2019年3月29日 |
#223 在 #lua
在 include-lua 中使用
5KB
73 行
include-lua
include-lua 是一个crate,允许将Lua源树嵌入到Rust应用程序的二进制文件中。然后可以将此树加载到rlua
上下文中,并通过 require
从它导入代码。
基本用法
首先,通过宏 include_lua!
创建 LuaModules
结构体的实例。此宏接受一个字符串字面量参数,指定一个目录,相对于您的crate的 src
文件夹。此目录及其子目录中的所有 .lua
文件都将包含为可加载模块。
一旦创建了 LuaModules
结构体,您可以通过调用 ctx..add_modules(modules)
将其导入到 rlua::Context
中。这是一个由特质提供的扩展方法,因此请确保您的代码中有 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–9MB
~86K SLoC