2014-12-23 23 views
3

我試圖編譯一些代碼,但我發現了一個非常奇怪的錯誤:爲什麼特性`core :: fmt :: Show`沒有爲類型`core :: fmt :: Show + Sized`實現?

the trait core::fmt::Show is not implemented for the type core::fmt::Show + Sized

,代碼:

use std::fmt::Show; 

fn main() { 
    println!("{}", return_showed()); // Error occurs here 
} 

fn return_showed() -> Box<Show+Sized+'static> { 
    box "test" as Box<Show+Sized> 
} 

這沒有多大意義了我。這是編譯器中的錯誤嗎?

在此先感謝!

+0

你能多加一點爲什麼你需要'+ Sized'嗎? – Shepmaster

+0

@Shepmaster在我的實際代碼中,我需要一個Sized。這只是一個簡化的測試案例。 –

回答

1

鏽1.0

張貼在原來的問題代碼編譯爲現在的預期。

原始

如果您不需要Sized,那麼你可以使用這個:

fn show_boxed() -> Box<Show+'static> { // ' 
    box "test" 
} 

fn main() { 
    println!("{}", &*show_boxed()); 
} 

據我瞭解,&*將間接引用,然後再參考框。這將其從Box<core::fmt::Show>更改爲&core::fmt::Show,格式化機器知道如何處理。

編輯

你也可以挑選出只是性狀對象你想要的:

fn return_showed() -> Box<Show+Sized+'static> { // ' 
    box "test" as Box<Show+Sized> 
} 

fn main() { 
    let z: &Show = &*return_showed(); 
    println!("{}", z); 
} 

我同意這是低於理想;這可能是值得提起一個鏽問題。

+1

我仍然想知道是什麼原因導致了這個錯誤。 –

相關問題