我有以下代码:
trait A {
fn foo(&self);
}
trait B {
fn bar(&self);
}
trait C : A + B {
}
struct S;
impl A for S {
fn foo(&self) {
println!("In S->foo()");
}
}
impl B for S {
fn bar(&self) {
println!("In S->bar()");
}
}
impl C for S {
}
fn main() {
let s = S;
s.foo();
s.bar();
}
Run Code Online (Sandbox Code Playgroud)
(Rust操场链接:http://is.gd/pde2LE)
是否有可能只实现C了S贯彻foo和bar功能在实现块?我尝试了以下但它失败了:
trait A {
fn foo(&self);
}
trait B {
fn bar(&self);
}
trait C : A + B {
}
struct S;
impl C for S {
fn foo(&self) {
println!("In S->foo()");
}
fn bar(&self) {
println!("In S->bar()");
}
}
fn main() {
let s = S;
s.foo();
s.bar();
}
Run Code Online (Sandbox Code Playgroud)
(Rust操场链接:http://is.gd/CqA6J5)
扩展Veedrac的评论:不,这是不可能的,特别是因为特征继承并不意味着像Java这样的OO语言的继承.
在Rust中,trait继承更接近Haskell的类类继承.如果trait A继承了trait B:
trait A: B { ... }
Run Code Online (Sandbox Code Playgroud)
它只意味着"如果某种类型T实现A,它也必须实现B".它不是"是一种"关系,而是一种特殊的约束.特质本身仍然是不相交的.因此,B如果要A为类型实现,则必须显式实现特征.
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |