Box {} 这个语法是什么意思? 最佳答案 TL;DR:这是一种用于指定tr-6ren">
gpt4 book ai didi

syntax - "dyn"在类型中是什么意思?

转载 作者:行者123 更新时间:2023-11-29 07:40:20 26 4
gpt4 key购买 nike

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

fn foo(arg: &dyn Display) {}

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

这个语法是什么意思?

最佳答案

TL;DR:这是一种用于指定trait 对象 类型的语法,为清楚起见必须指定。


自 Rust 1.0 以来,traits 过着双重生活。一旦声明了一个特征,它就可以用作特征或类型:

// 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 语法相似,力求使类型成为 trait object更明显地区别于“裸”特征语法。

dyn 是“动态”的缩写,指的是特征对象执行 dynamic dispatch 的事实。 .这意味着将在程序运行时决定调用哪个函数。将此与 static dispatch 进行对比它使用 impl Trait 语法。

不带 dyn 的语法现在已弃用,很可能在后续的 edition of Rust 中它将被删除。

关于syntax - "dyn"在类型中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com