#lua #框架 #绑定

nightly flu

Lua 5.1 框架用于 Rust

2 个版本

使用旧 Rust 2015

0.0.2 2016 年 4 月 1 日
0.0.1 2016 年 4 月 1 日

#2507开发工具

MIT/Apache

405KB
12K SLoC

C 11K SLoC // 0.1% comments Rust 1K SLoC // 0.1% comments

flu

flu 是在 Rust 编程语言中处理 Lua 5.1 的框架。它旨在提供对核心 Lua 概念的近似安全抽象——但也提供了对 Lua 栈的不安全访问。

它看起来是什么样子的?

要通过 flu 与 Lua 交互,您必须首先创建一个 flu::LuaContext。您可以这样做,通过封装现有的 *mut lua_State,或者通过使用 flu::LuaContext::new() 来初始化一个新实例。

let cxt = flu::LuaContext::new();
// or
let wrapped_cxt = flu::LuaContext::from_state(lua_state);

抽象

待办事项

修改栈很容易。 flu::LuaContext 有一个名为 push 的函数,其定义如下

pub fn push<T>(&self, val: T)
               where T: Push {
    val.push(self);
}

这基本上意味着实现了 Push 特性的任何内容都可以推入栈中。默认情况下,Push 为以下类型实现了

  • nil(一个单元结构体)
  • 布尔值
  • i8i16i32
  • f32f64
  • &strString
  • Option<T:Push>
  • (A,B, ...) 其中A:Push,B:Push, ...

在从栈中读取时,这也同样成立。flu 提供了另一个名为 Read 的 trait,允许实现该 trait 的类型被读取回 Rust(Read 也为前面提到的类型实现了)。

flu::LuaContext 有两个用于从栈中读取值的方法——readpop。将值推入栈然后读取的一个简单示例可能如下所示

let cxt = flu::LuaContext::new();

cxt.push("hello world!");
let val = cxt.pop::<&str>();

assert_eq!(val, "hello world!");

许可证

许可方式为以下之一

由您选择。

贡献

除非您明确说明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,应如上双重授权,不附加任何额外条款或条件。

依赖项