1 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
TL; DR:這是用于指定特征對(duì)象類型的語法,出于清晰起見,應(yīng)首選該語法。
從Rust 1.0開始,特質(zhì)帶來雙重生活。聲明了特征后,就可以將其用作特征或類型:
// As a trait
impl MyTrait for SomeType {}
// As a type!
impl MyTrait {}
impl AnotherTrait for MyTrait {}
可以想象,這種雙重含義可能會(huì)引起一些混亂。另外,由于MyTrait類型是未調(diào)整大小/動(dòng)態(tài)大小的類型,因此這可能使人們暴露于非常復(fù)雜的錯(cuò)誤消息中。
為了改善此問題,RFC 2113引入了dyn語法。從Rust 1.27開始可以使用以下語法:
use std::{fmt::Display, sync::Arc};
fn main() {
let display_ref: &dyn Display = &42;
let display_box: Box<dyn Display> = Box::new(42);
let display_arc: Arc<dyn Display> = Arc::new(42);
}
這個(gè)新關(guān)鍵字與impl Trait語法相似,并致力于使特征對(duì)象的類型與“裸”特征語法更加明顯。
添加回答
舉報(bào)