< 返回版块

ZihanType 发表于 2023-03-19 01:49

Tags:函数, 命名参数, 默认参数

nade

nade,一个为函数添加命名参数和默认参数的属性宏。

大家都知道,Rust 中缺少命名参数和默认参数,虽然可以通过使用将函数参数设为Into<Option<T>>,模拟默认参数,但是对于命名参数,就做不到了,目前比较通用的方法大概是用 结构体 + Builder 模式。

但是我在看 Kotlin 写 Compose 代码的时候,实在是眼馋 Kotlin 能写得很优雅,再看 leptos,用 typed-builder 模拟,总是差了一点味道。所以我参考了社区中已有的 2 个实现,default-argsduang,实现了一个新的宏,nade。取自 nameddefault 的各前 2 个字母。

示例

use nade::nade;

#[nade]
fn foo(#[nade(42)] a: i32, b: i32, #[nade] c: i32) -> i32 {
    a + b + c
}

fn main() {
    assert_eq!(foo!(b = 1, c = 2), 45);
    assert_eq!(foo!(a = 1, b = 2, c = 3), 6);
    assert_eq!(foo!(a = 1, b = 2), 3);
    assert_eq!(foo!(1, 2, c = 3), 6);
    assert_eq!(foo!(1, 2, 3), 6);
    assert_eq!(foo!(b = 3), 45);
}

这只是一个简单的例子,更详细的文档和示例请看仓库。

nade

欢迎各位使用,有问题欢迎提 issue,如果觉得好用,欢迎 star。

评论区

写评论

还没有评论

1 共 0 条评论, 1 页