1个不稳定版本
使用旧的Rust 2015
0.3.0 | 2017年10月18日 |
---|
#2337 在 Rust模式
30KB
581 代码行
plugger-ruby
直接将Ruby插件嵌入到你的Rust项目中!
需要Rust nightly。
目的
此库的目的是尽可能地简化在Rust项目中的脚本编写。
该库本身由两部分组成 - 一个Ruby VM和一个语法扩展,它创建Ruby包装器来覆盖你的struct
和impl
,以便可以直接从Ruby中使用。
应该可以通过简单地给类型添加#[pluggable]
注解,然后直接从Ruby中使用它。
该库与其他库的区别在于,它允许你共享Rust代码,而不是在Rust中编写Ruby对象。
功能
- 创建Ruby VM和评估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();
}
依赖关系
~20KB