#capture #struct #macro

captur

用于从闭包中不连续的字段捕获整个结构的宏

3 个版本 (稳定版)

1.0.1 2024年7月21日
1.0.0 2024年6月30日
0.1.0 2021年7月1日

#370Rust 模式

Download history 52/week @ 2024-05-03 24/week @ 2024-05-10 29/week @ 2024-05-17 63/week @ 2024-05-24 611/week @ 2024-05-31 119/week @ 2024-06-07 101/week @ 2024-06-14 125/week @ 2024-06-21 278/week @ 2024-06-28 40/week @ 2024-07-05 119/week @ 2024-07-12 201/week @ 2024-07-19 65/week @ 2024-07-26 64/week @ 2024-08-02 64/week @ 2024-08-09 16/week @ 2024-08-16

每月221 次下载
4 crates 中使用

ISC 许可证

11KB

Crates.io docs GitHub license

Captur

从 Rust 2021 开始,Rust 将不再捕获整个结构体,而只会捕获闭包中使用的字段的非连续集合。在某些情况下,需要捕获结构体以保留特定的析构顺序。此宏将捕获闭包内的结构体,确保正确的析构顺序。

解决方案

解决这个问题的一个典型方法是为结构体创建一个未使用的引用。

let some_struct = SomeStruct::new();
let result = || {
    // capture some_struct within the closure
    let _ = &some_struct;
    println!("{}", some_struct.y);
}

虽然这在需要捕获的闭包中实现起来很简单,但没有注释,未使用行的含义很难确定。此宏提供了一种自文档化且可能更简洁的方式来捕获结构体。

安装和用法

[dependencies]
captur = "1"
use captur::capture;

fn send_event_and_action(action: &Action, event: Event) {
    send(|sender| {
        capture!(action, event);
        sender.send(action.name.as_str(), event.code);
    });
}

支持的 Rust 版本

此项目将支持自 Rust 2021 的第一个版本 1.56.0 以来的 Rust 版本。

停止支持 Rust 版本将导致主要版本号的增加,遵循 语义版本控制

许可证

Captur 在 ISC 许可证下发布。请参阅 LICENSE

无运行时依赖