为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2019-10-12 10:28:42
我最近看过使用dyn关键字的代码:fn foo(arg: &dyn Display) {}fn bar() -> Box<dyn Display> {}这个语法是什么意思?
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

TL; DR:这是用于指定特征对象类型的语法,出于清晰起见,应首选该语法。


从Rust 1.0开始,特质带来双重生活。声明了特征后,就可以将其用作特征或类型:


// As a trait

impl 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() {

    let display_ref: &dyn Display = &42;

    let display_box: Box<dyn Display> = Box::new(42);

    let display_arc: Arc<dyn Display> = Arc::new(42);

}

这个新关键字与impl Trait语法相似,并致力于使特征对象的类型与“裸”特征语法更加明显。


查看完整回答
反对 回复 2019-10-12
  • 1 回答
  • 0 关注
  • 544 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信