1个不稳定版本

使用旧的Rust 2015

0.4.2 2018年3月28日

#2359 in Rust模式

Download history 100/week @ 2024-03-13 122/week @ 2024-03-20 114/week @ 2024-03-27 113/week @ 2024-04-03 85/week @ 2024-04-10 91/week @ 2024-04-17 111/week @ 2024-04-24 122/week @ 2024-05-01 92/week @ 2024-05-08 94/week @ 2024-05-15 103/week @ 2024-05-22 100/week @ 2024-05-29 92/week @ 2024-06-05 100/week @ 2024-06-12 69/week @ 2024-06-19 63/week @ 2024-06-26

338 每月下载量
用于 5 crates

MIT 许可证

155KB
3K SLoC

针对Lua的高层零成本绑定

Lua是一种解释型编程语言。此crate允许您执行Lua代码。

通用用法

为了执行Lua代码,您首先需要一个Lua上下文,该上下文在本库中由Lua结构体表示。然后您可以调用此对象上的execute方法

例如

use hlua::Lua;

let mut lua = Lua::new();
lua.execute::<()>("a = 12 * 5").unwrap();

此示例将值60放入全局变量a中。所有全局变量的值都存储在Lua结构体中。如果您在同一上下文中执行多个Lua脚本,则每个脚本都可以访问由上一个脚本修改的相同全局变量。

为了真正有用地使用Lua,我们需要让Lua和Rust相互通信。这可以通过以下四种方式完成

  • 您可以使用Lua结构体上的方法使用getset方法读取或写入全局变量的值。例如,您可以使用Lua脚本写入一个全局变量,然后从Rust中读取它,或者您可以从Rust中写入一个全局变量,然后从Lua脚本中读取它。

  • 您使用execute方法执行的Lua脚本可以返回一个值。

  • 您可以将全局变量的值设置为Rust函数或闭包,然后可以使用Lua脚本调用它们。有关更多信息,请参阅Function结构体。例如,如果您将全局变量foo的值设置为Rust函数,则您可以从Lua中使用foo()调用它。

  • 类似地,您可以将全局变量的值设置为Lua函数,然后从Rust中调用它。函数调用可以返回一个值。

您使用哪种方法取决于您希望向Lua脚本公开哪个API。

推送和加载值

Rust和Lua之间的接口涉及两个方面

  • 将值从Rust发送到Lua,这称为推送值。
  • 将值从Lua发送到Rust,这称为加载值。

推送(即从Rust发送到Lua)可以使用set方法来完成。

lua.set("a", 50);

根据情况,您可以推送实现Push特质或PushOne特质的值。

  • 整数、浮点数和布尔值。
  • String&str
  • 任何参数可加载且返回类型可推送的Rust函数或闭包。有关更多信息,请参阅Function结构体的文档
  • AnyLuaValue结构体。此枚举表示Lua中的任何可能值。
  • LuaCodeLuaCodeFromReader结构体。由于推送这些结构体可能导致错误,您需要使用checked_set而不是set
  • 内容可推送的VecHashMap
  • 作为特殊情况,Result只能作为Rust函数或闭包的返回类型推送。如果它们包含错误,则认为Rust函数调用失败。
  • 作为特殊情况,当它们是Rust函数或闭包的返回类型时,元组可以被推送。它们实现了Push但没有实现PushOne
  • 待办事项:userdata

加载(即从Lua发送到Rust)可以使用get方法来完成。

let a: i32 = lua.get("a").unwrap();

您可以加载实现LuaRead特质的值。

  • 整数、浮点数和布尔值。
  • StringStringInLua(即&str的等效项)。加载后者没有成本,而加载一个String则会进行分配。
  • 任何函数(Lua或Rust),使用LuaFunction结构体。然后可以使用它来执行函数。
  • AnyLuaValue结构体。此枚举表示Lua中的任何可能值。
  • LuaTable结构体。此结构体表示Lua中的表,其中键和值可以是不同类型。然后可以迭代表,并加载或修改单个元素。
  • 作为特殊情况,当它们是Lua函数的返回类型或execute的返回类型时,元组可以被加载。
  • 待办事项:userdata

依赖项

~470–700KB
~18K SLoC