rust - 是否可以创建一个宏来实现构建器模式方法?

标签 rust

我有一个 builder pattern为我的结构实现:

pub struct Struct {
    pub grand_finals_modifier: bool,
}
impl Struct { 
    pub fn new() -> Struct {
        Struct {
            grand_finals_modifier: false,
        }
    }

    pub fn grand_finals_modifier<'a>(&'a mut self, name: bool) -> &'a mut Struct {
        self.grand_finals_modifier = grand_finals_modifier;
        self
    }
}

在 Rust 中是否可以为这样的方法制作一个宏来概括并避免大量重复代码?我们可以使用以下内容:

impl Struct {
    builder_field!(hello, bool);
}     

最佳答案

看完the documentation ,我想出了这段代码:

macro_rules! builder_field {
    ($field:ident, $field_type:ty) => {
        pub fn $field<'a>(&'a mut self,
                          $field: $field_type) -> &'a mut Self {
            self.$field = $field;
            self
        }
    };
}

struct Struct {
    pub hello: bool,
}
impl Struct {
    builder_field!(hello, bool);
}

fn main() {
    let mut s = Struct {
        hello: false,
    };
    s.hello(true);
    println!("Struct hello is: {}", s.hello);
}

它完全满足我的需要:创建一个具有指定名称、指定成员和类型的公共(public)构建器方法。

关于rust - 是否可以创建一个宏来实现构建器模式方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38158167/

相关文章:

generics - 既然 num::Zero 和 One 已被弃用,应该如何提供 1 或 0?

rust - Rust 和可变性中的模式匹配

rust - 特征具有生命周期参数意味着什么?

generics - 为什么 Box<T> 的特征实现与 Fn() 冲突?

linked-list - 在 Rust 中打印单向链表的最佳方式

rust - 将本地值插入静态 mut 的安全方法

rust - Rocket 0.5+ 中未使用异步?

rust - 翻转 boolean 值的最快方法

unit-testing - 如何检查函数是否已在 Rust 中调用?

rust - 为什么没有围栏的评论会触发 doctest?