在 Rust 1.3 中,继承结构体的最佳方法是什么?

26

当我使用 Rust 1.3 编译时,编译器告诉我语言中已经移除了 virtual 结构体:

struct Foo: Bar {

}

2
如果你真的需要继承,http://aturon.github.io/blog/2015/09/18/reuse/中有一些来自Servo的工作示例。 - ArtemGr
答案 https://dev59.com/8sHqa4cB1Zd3GeqP6L2N#68757050 倾向于组合而非继承。 - Michael Freidgeim
1个回答

23

简短回答,你不能用结构体实现继承。

但是,Rust使用组合代替继承。然而,在traits中,你可以实现继承。Traits没有数据,但是它们可以定义函数,因此你可以通过使用它们获得许多继承的好处:

trait Foo {
    fn foo(&self);
}

trait FooBar: Foo {
    fn foobar(&self);
}

实现FooBar的人必须实现foo(除非您提供默认实现)。

Rust实现特化的一种方式通常是通过enums,在Rust中非常强大。其中一个Rust开发者写了关于Rust如何处理这些问题的很好的博客系列。我建议您阅读它以及阅读官方书籍。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接