在Rust回归时向上翻箱子

时间:2016-08-10 19:47:21

标签: rust

我遇到了一个奇怪的问题:

trait A {}
trait B : A {}

struct MyStruct {}
impl A for MyStruct {}
impl B for MyStruct {}

fn fun_b() -> Box<B> {
    Box::new(MyStruct{})
}

fn fun_a() -> Box<A> {
    /*
    error: mismatched types [E0308]
    note: expected type `Box<A + 'static>`
    note:    found type `Box<B + 'static>`
    */
    fun_b()
}

fn main() {
    fun_a();
    fun_b();
}

如果我将fun_a替换为:

,则会编译
fn fun_a() -> Box<A> {
    Box::new(MyStruct{})
}

(与fun_b完全相同)

我需要在这里明确投射吗?为什么,更重要的是如何?

0 个答案:

没有答案