我试图将一段Lua代码的解析扔到函数中以使其更容易。现在,我有以下代码:
fn load_file<'lua, 'a>(
context: Context<'lua>,
root: &'a str,
project_filename: &'a str,
) -> Chunk<'lua, 'a> {
let path_str = Path::new(root).join(project_filename);
let source = std::fs::read(path_str).expect(&format!(
"Failed to load project file: {}",
project_filename
));
let chunk = context
.load(&source)
.set_name(project_filename)
.expect("Failed to create chunk");
return chunk;
}
source
在函数结束时被删除,但是返回的chunk需要它。我不能克隆它,因为它也掉了。如何使引用在函数的生命周期之后仍然有效?
创建Chunk
不解析或编译源代码-这就是为什么它借鉴了source
,因为它将需要访问这些数据。
如果您想编译块而不运行它(消除对保留源代码的依赖),您可以调用into_function
方法。
如果你愿意在编译的同时执行数据块,那么可以使用call
、eval
或exec
。
上面的链接指向rlua
的文档,但如果你使用mlua
,同样的答案也适用。