【发布时间】:2020-02-10 01:34:21
【问题描述】:
如何在 Rust 中尝试类似以下的操作?
构建器类是一个特征对象,它返回另一个特征对象(类型擦除),其中选择的实现由我们正在使用的构建器特征的特定对象定义。
trait Builder {
// I want this trait to return a trait object
fn commits(&self) -> dyn Commit;
fn finish(&self);
}
trait Commit {
}
struct FooBuilder {
}
struct FooCommit {
}
impl Builder for FooBuilder {
fn commits(&self) -> impl Commit {
FooCommit{ }
}
fn finish(&self) {
}
}
fn get_commits(b: &Builder) {
// trait object returns a trait
let c = b.commits();
}
fn main() {
let b = FooBuilder{};
get_commits(&b);
b.finish();
}
【问题讨论】:
-
特征不是对象,它是对象的属性。你可以返回一些实现 trait 的东西。
标签: rust