#traits #scope #macro #methods #callable #no-alloc #expand

无 std 固有

通过 trait 范围外使 trait 方法可调用

19 个版本 (12 个稳定版)

1.0.11 2024 年 1 月 2 日
1.0.10 2023 年 7 月 21 日
1.0.7 2023 年 3 月 25 日
1.0.3 2022 年 12 月 17 日
0.1.0 2019 年 7 月 14 日

#1007 in Rust 模式

Download history 104776/week @ 2024-04-14 106500/week @ 2024-04-21 116134/week @ 2024-04-28 107499/week @ 2024-05-05 124924/week @ 2024-05-12 116798/week @ 2024-05-19 121590/week @ 2024-05-26 141801/week @ 2024-06-02 136042/week @ 2024-06-09 120885/week @ 2024-06-16 128617/week @ 2024-06-23 128056/week @ 2024-06-30 133580/week @ 2024-07-07 124025/week @ 2024-07-14 129786/week @ 2024-07-21 123107/week @ 2024-07-28

每月 513,719 次下载
127 个crate(6 个直接使用) 中使用

MIT/Apache

15KB
242 代码行

#[固有]

github crates.io docs.rs build status

此crate提供了一个属性宏,使trait方法在trait范围内也可调用。

[dependencies]
inherent = "1.0"

示例

mod types {
    use inherent::inherent;

    trait Trait {
        fn f(self);
    }

    pub struct Struct;

    #[inherent]
    impl Trait for Struct {
        pub fn f(self) {}
    }
}

fn main() {
    // types::Trait is not in scope, but method can be called.
    types::Struct.f();
}

如果没有在 trait 实现 上使用 固有 宏,它将因以下错误而失败

error[E0599]: no method named `f` found for type `types::Struct` in the current scope
  --> src/main.rs:18:19
   |
8  |     pub struct Struct;
   |     ------------------ method `f` not found for this
...
18 |     types::Struct.f();
   |                   ^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `f`, perhaps you need to implement it:
           candidate #1: `types::Trait`

固有 宏扩展到 trait 实现的 Self 类型的固有方法,这些方法将转发到 trait 方法。在上面的示例中,生成的代码将是

impl Struct {
    pub fn f(self) {
        <Self as Trait>::f(self)
    }
}

许可证

根据您的选择,在Apache License,版本 2.0MIT 许可证下许可。
除非您明确声明,否则任何提交给此crate的故意贡献,如 Apache-2.0 许可证中定义的,应按上述方式双重许可,而无需任何额外的条款或条件。

依赖关系

~255–700KB
~17K SLoC