7 个版本
使用旧的 Rust 2015
0.3.0 | 2017 年 10 月 18 日 |
---|---|
0.2.0 | 2017 年 10 月 18 日 |
0.1.5 | 2017 年 10 月 17 日 |
0.1.3 | 2016 年 8 月 14 日 |
0.1.2 | 2016 年 5 月 17 日 |
#258 in FFI
每月 30 次下载
在 3 crates 中使用
5KB
72 行
plugger-ruby
直接将 Ruby 插件嵌入到您的 Rust 项目中!
需要 Rust 夜间构建版。
目的
此库的目的是尽可能简化在 Rust 项目中进行脚本编写。
库本身由两部分组成 - 一个 Ruby 虚拟机和语法扩展,它将您的 struct
和 impl
转换为 Ruby 包装器,以便它们可以直接在 Ruby 中使用。
您应该能够简单地使用 #[pluggable]
注解类型,并在 Ruby 中直接使用它。
此库与其他库的不同之处在于,它允许您 共享 Rust 代码,而不是在 Rust 中编写 Ruby 对象。
功能
- 创建 Ruby 虚拟机并
eval
评估 Ruby 代码 - 从 Ruby 调用 Rust 对象的方法
- 从 Ruby 访问公共 struct 字段
- 通过 Ruby 创建新的 Rust 对象
- 复杂的类型,例如枚举、元组
- 自动将 Ruby 参数打包到 Rust 类型中
- 自动将 Rust 返回类型打包到 Ruby 值中
- 支持 Python
示例
注意:这里并非所有内容都受到支持。这主要是 Rust 和 Ruby 类型之间的自动强制转换。
查看 tools/
以获取工作示例。
struct Vector3(pub f64, pub f64, pub f64);
#[pluggable]
struct Player
{
name: String,
health: f32,
position: Vector3,
rotation: Vector3,
}
#[pluggable]
impl Player
{
pub fn revive(&mut self) { self.health = 1.0 }
pub fn rename(&mut self, name: &str) { self.name = name.to_owned() }
pub fn transport(&mut self, position: Vector3) { self.position = position; }
}
fn main() {
let mut vm = Ruby::new();
let player = Player { /* ... */ };
vm.plug("main_player", player);
vm.eval("main_player.revive").unwrap();
vm.eval("main_player.rename('foo')").unwrap();
}