2个版本
0.1.1 | 2024年2月5日 |
---|---|
0.1.0 | 2024年2月4日 |
#457 in 过程宏
13KB
232 代码行
功能特质
描述
一个简单的宏,灵感来自Java的功能接口。
该宏为 Fn
,FnMut
或 FnOnce
实现一个特质,当特质
-
只包含一个方法
-
该方法有一个接收器,接收器是
&self
,&mut self
或self
-
特质或方法中没有泛型类型(未来版本可能更改)
-
特质中没有泛型生命周期(未来版本可能更改)
-
没有超特质(未来版本可能更改)
-
不是不安全的
-
没有不安全的方法(未来版本可能更改)
示例
use functional_trait::functional_trait;
#[functional_trait]
trait A {
fn a(&self, i: i32, j: i32) -> i32;
}
#[functional_trait]
trait B {
fn b(&mut self, i: i32, j: i32) -> i32;
}
#[functional_trait]
trait C {
fn c(self, i: i32, j: i32) -> i32;
}
#[functional_trait]
trait D {
fn d<'c>(&self, b: &'c i32) -> &'c i32;
}
fn main() {
let f = |a, b| a + b + 10;
dbg!(f.a(1, 2));
let mut i = 0;
let mut f = |a, b| {
i += 1;
a + b + i
};
dbg!(f.b(1, 2));
let s = String::new();
let f = |a, b| {
drop(s);
a + b + i
};
dbg!(f.c(1, 2));
let f = {
fn f(a: &i32) -> &i32 {
a
}
f
};
f.d(&1);
}
依赖
~275–720KB
~17K SLoC