百科.dev
全部条目在线工具AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
M

magnus

> 编程语言
开源

Rust 的 Ruby 绑定。在 Rust 中编写 Ruby 扩展 gem,或从 Rust 调用 Ruby。

896 stars0 点赞1 次浏览
访问官网GitHub

工具介绍

Rust 的 Ruby 绑定。在 Rust 中编写 Ruby 扩展 gem,或从 Rust 调用 Ruby。

马格努斯

Rust 的高级 Ruby 绑定。在 Rust 中编写 Ruby 扩展 gem,或调用 来自 Rust 二进制文件的 Ruby 代码。 [API 文档] | GitHub | crates.io [开始使用] | [类型转换] | [安全性] | [兼容性]

示例

定义方法

使用 Magnus, 可以将常规的 Rust 函数绑定为 Ruby 中的方法 自动类型转换。调用者传递错误的参数或不兼容的参数时 类型将得到与它们所用的相同类型的 ArgumentError 或 TypeError 从 Ruby 的内置方法来看。 定义函数(没有 Ruby self 参数):

rust
fn fib(n: usize) -> usize {
    match n {
        0 => 0,
        1 | 2 => 1,
        _ => fib(n - 1) + fib(n - 2),
    }
}

#[magnus::init]
fn init(ruby: &magnus::Ruby) -> Result {
    ruby.define_global_function("fib", magnus::function!(fib, 1));
    Ok(())
}

定义一个方法(带有 Ruby self 参数):

rust
fn is_blank(rb_self: String) -> bool {
    !rb_self.contains(|c: char| !c.is_whitespace())
}

#[magnus::init]
fn init(ruby: &magnus::Ruby) -> Result {
    // returns the existing class if already defined
    let class = ruby.define_class("String", ruby.class_object())?;
    // 0 as self doesn't count against the number of arguments
    class.define_method("blank?", magnus::method!(is_blank, 0))?;
    Ok(())
}

调用 Ruby 方法

一些 Ruby 方法在 Ruby 的 C API 中有直接对应,因此也在 Magnus 中有对应。Ruby 的 Object#frozen? 方法可用为 magnus::ReprValue::check_frozen,或者 Array#[] 变为 magnus::RArray::aref。仅在 Ruby 中定义的其他 Ruby 方法必须使用 magnus::ReprValue::funcall 来调用。所有 Magnus 的 Ruby 封装类型都实现了 ReprValue 特性,因此可以在所有类型上使用 funcall。

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Rustffirubyrust

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言