当前位置:  开发笔记 > 后端 > 正文

如何用Rust中的链式方法调用编写一个惯用的构建模式?

如何解决《如何用Rust中的链式方法调用编写一个惯用的构建模式?》经验,为你挑选了1个好方法。

基于以下示例,可以在Rust中使用链式方法调用编写构建模式,该方法调用通过值或通过引用传递(使用生命周期说明符)

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

如何重载"新"方法?(回答)

https://github.com/rust-unofficial/patterns/blob/master/patterns/builder.md

Rust中的构建器模式可能如下所示:

 ui::Button::new()
    .label("Test")
    .align(Align::Center)
    .build();

在写作惯用的Rust时,有一种强烈的偏好吗?

有没有一个很好的例子,如何在Rust中写这个?



1> Matthieu M...:

实际上有两个权衡:

命名的setter应该self通过值还是引用接受?

最终build方法应该接受self价值还是参考?

我的建议是:

对于二传手的可变参考

build方法的价值

这与Rust Book中使用引用的Builder模式稍有不同build.


为什么通过可变引用传递给setter?

虽然编译器可以优化由调用引起的移动fn label(self, &str) -> ButtonBuilder,但是不能保证.

另一方面,可变参考方式已经是最优的,因此您无需依赖优化器.


为什么要通过最后的价值build

对于仅由Copy字段组成的构建者,build服用self或之间没有区别&self.

但是,只要构建器包含非Copy字段,传递&selfbuild需要深度克隆这些字段.

另一方面,传递self值允许build移动字段,从而避免不必要的副本.

如果希望重新使用构建器,那么构建器应该实现Clone.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有