gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:48:58 26 4
gpt4 key购买 nike

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

fn foo(arg: &dyn Display) {}

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

这个语法是什么意思?

最佳答案

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语法相似,并努力使 trait object的类型与“裸露”特征语法更加明显。 dyn是“dynamic”的缩写,是指特征对象执行 dynamic dispatch的事实。这意味着将在程序运行时确定确切调用哪个函数。将此与使用 impl Trait语法的 static dispatch进行对比。
现在不建议使用不带 dyn的语法,并且很可能在后续的 edition of Rust中将其删除。
  • Why would I implement methods on a trait instead of as part of the trait?
  • What makes something a "trait object"?
  • 关于syntax - “dyn”在类型中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61425619/

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