ide*_*n42 0 convention builder-pattern rust
基于以下示例,可以在Rust中使用链式方法调用编写构建模式,该方法调用通过值或通过引用传递(使用生命周期说明符)
Rust中的构建器模式可能如下所示:
ui::Button::new()
.label("Test")
.align(Align::Center)
.build();
Run Code Online (Sandbox Code Playgroud)
在写作惯用的Rust时,有一种强烈的偏好吗?
有没有一个很好的例子,如何在Rust中写这个?
实际上有两个权衡:
self
通过值还是引用接受?build
方法应该接受self
价值还是参考?我的建议是:
build
方法的价值这与Rust Book中使用引用的Builder模式稍有不同build
.
为什么通过可变引用传递给setter?
虽然编译器可以优化由调用引起的移动fn label(self, &str) -> ButtonBuilder
,但是不能保证.
另一方面,可变参考方式已经是最优的,因此您无需依赖优化器.
为什么要通过最后的价值build
?
对于仅由Copy
字段组成的构建者,build
服用self
或之间没有区别&self
.
但是,只要构建器包含非Copy
字段,传递&self
到build
需要深度克隆这些字段.
另一方面,传递self
值允许build
移动字段,从而避免不必要的副本.
如果希望重新使用构建器,那么构建器应该实现Clone
.
归档时间: |
|
查看次数: |
1217 次 |
最近记录: |