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 模式
每月 513,719 次下载
在 127 个crate(6 个直接使用) 中使用
15KB
242 代码行
#[固有]
此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.0 或 MIT 许可证下许可。除非您明确声明,否则任何提交给此crate的故意贡献,如 Apache-2.0 许可证中定义的,应按上述方式双重许可,而无需任何额外的条款或条件。
依赖关系
~255–700KB
~17K SLoC