2015-12-19 60 views
1

對不起,我可能會丟失東西超級明顯。我想知道爲什麼我不能像這樣調用我的特質方法。這不應該是標準的UFCS。Rust爲此UFCS呼叫需要哪些類型的註釋?

trait FooPrinter { 
    fn print() { 
     println!("hello"); 
    } 
} 

fn main() { 
    FooPrinter::print(); 
} 

圍欄:http://is.gd/ZPu9iP

我收到以下錯誤

error: type annotations required: cannot resolve `_ : FooPrinter` 

回答

3

你不能調用一個方法特質不指定你想叫它哪個實現。這個方法有一個默認的實現並不重要。

的實際UFCS調用如下:

trait FooPrinter { 
    fn print() { 
     println!("hello"); 
    } 
} 

impl FooPrinter for() {} 

fn main() { 
    <() as FooPrinter>::print(); 
} 

playground

如果您不需要多態性這種方法,將其移動到structenum,或使它成爲一個全球性的功能。

+0

有趣。所以基本上,只有當trait方法需要像這樣的某種'self'時,纔可以使用'UFCS'? http://is.gd/36zFFZ – Christoph

+0

噢,它確實有可能。看我的編輯。我沒有深入細節,因爲你的例子太少了,我以爲你使用了錯誤的工具來完成這項工作。 –

+0

哦,那更有趣!我真的只是在討論語言功能;) – Christoph