我如何在Rust中定义一个公共 struct ,其中所有字段都是公共的,而不必在每个字段前面重复pub个修饰符?

pub_struct宏是理想的:

pub_struct! Foo {
    a: i32,
    b: f64,
    // ...
}

这相当于:

pub struct Foo {
    pub a: i32,
    pub b: f64,
    //...
}

推荐答案

macro_rules! pub_struct {
    ($name:ident {$($field:ident: $t:ty,)*}) => {
        #[derive(Debug, Clone, PartialEq)] // ewww
        pub struct $name {
            $(pub $field: $t),*
        }
    }
}

不幸的是,derive可能只应用于 struct 、枚举和联合,所以我不知道如何将它们提升到调用方.

用法:

pub_struct!(Foo {
    a: i32,
    b: f64,
});

如果我不需要括号和分号,也就是说,如果Rust支持reader宏,那就太好了.

Rust相关问答推荐

为什么类型需要在这个代码中手动指定,在rust?

如何在Rust中表示仅具有特定大小的数组

为什么BitVec缺少Serialize trait?

如何指定不同的类型来常量Rust中的泛型参数?

为什么';t std::cell::ref使用引用而不是非空?

在0..1之间将U64转换为F64

失真图像图形捕获Api

如何设置activx websocket actorless的消息大小限制?

在为第三方 struct 实现第三方特征时避免包装器的任何方法

在使用粗粒度锁访问的数据 struct 中使用 RefCell 是否安全?

如何在 Rust 中将函数项变成函数指针

在发布中包含 Rust DLL

Rust 中 Mutex<> 的深拷贝?

在 Bevy 项目中为 TextureAtlas 精灵实施 NearestNeighbor 的正确方法是什么?

使用 `clap` 在 Rust CLI 工具中设置布尔标志

如何在 Rust 中返回通用 struct

如何在 Rust 中编写涉及异步的重试函数

Rust,我如何正确释放堆分配的内存?

为实现特征的所有类型实现显示

在 Traits 函数中设置生命周期的问题