我为我的结构实现了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);
}
答案 0 :(得分:4)
在阅读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);
}
它完全符合我的需要:创建一个具有指定名称,指定成员和类型的公共构建器方法。
答案 1 :(得分:0)
要补充已经接受的答案,因为它已经有4年了,所以您应该签出箱子rust-derive-builder。它使用过程宏自动为任何结构实现构建器模式。