猿问

“ dyn”在类型中是什么意思?

我最近看过使用dyn关键字的代码:


fn foo(arg: &dyn Display) {}


fn bar() -> Box<dyn Display> {}

这个语法是什么意思?


SMILET
浏览 545回答 1
1回答

POPMUISE

TL; DR:这是用于指定特征对象类型的语法,出于清晰起见,应首选该语法。从Rust 1.0开始,特质带来双重生活。声明了特征后,就可以将其用作特征或类型:// As a traitimpl MyTrait for SomeType {}// As a type!impl MyTrait {}impl AnotherTrait for MyTrait {}可以想象,这种双重含义可能会引起一些混乱。另外,由于MyTrait类型是未调整大小/动态大小的类型,因此这可能使人们暴露于非常复杂的错误消息中。为了改善此问题,RFC 2113引入了dyn语法。从Rust 1.27开始可以使用以下语法:use std::{fmt::Display, sync::Arc};fn main() {&nbsp; &nbsp; let display_ref: &dyn Display = &42;&nbsp; &nbsp; let display_box: Box<dyn Display> = Box::new(42);&nbsp; &nbsp; let display_arc: Arc<dyn Display> = Arc::new(42);}这个新关键字与impl Trait语法相似,并致力于使特征对象的类型与“裸”特征语法更加明显。
随时随地看视频慕课网APP
我要回答