4个版本 (2个重大更新)
使用旧的Rust 2015
0.3.0 | 2017年10月18日 |
---|---|
0.2.0 | 2017年10月18日 |
0.1.1 | 2016年8月14日 |
0.1.0 | 2016年5月15日 |
#2188 在 Rust模式
在 2 个crate中使用
18KB
331 行
plugger-ruby
直接将Ruby插件嵌入您的Rust项目中!
需要Rust nightly。
目的
该库的目的是使在Rust项目中编写脚本尽可能容易。
库本身由两个主要部分组成 - 一个Ruby VM和一个语法扩展,该扩展创建Ruby包装器,覆盖您的struct
和impl
,以便它们可以直接从Ruby中使用。
应该可以通过简单地使用#[pluggable]
注释类型,并直接从Ruby中使用它。
该库与其他库的不同之处在于,它允许您共享您的Rust代码,而不是在Rust中编写Ruby对象。
功能
- 创建Ruby VM并
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();
}
依赖项
~130KB