#functional #macro #utilities

functional_trait

为一个函数实现特质的宏

2个版本

0.1.1 2024年2月5日
0.1.0 2024年2月4日

#457 in 过程宏

MIT/Apache

13KB
232 代码行

功能特质

描述

一个简单的宏,灵感来自Java的功能接口。

该宏为 FnFnMutFnOnce 实现一个特质,当特质

  • 只包含一个方法

  • 该方法有一个接收器,接收器是 &self&mut selfself

  • 特质或方法中没有泛型类型(未来版本可能更改)

  • 特质中没有泛型生命周期(未来版本可能更改)

  • 没有超特质(未来版本可能更改)

  • 不是不安全的

  • 没有不安全的方法(未来版本可能更改)

示例

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