![]() |
1
79
TL;DR:这是一种用于指定 特质对象 为了清晰起见,必须指定。 自Rust 1.0以来,这些特质就有了双重生活。一旦一个特征被声明,它可以被用作一个特征或一个类型:
正如你所想象的,这种双重含义可能会引起一些混乱。此外,由于
为了改善这个问题,
RFC 2113
介绍了
这个新关键字与
语法没有
|
![]() |
2
3
这个
换句话说,我们在编译时不知道对象的具体类型,我们只知道对象实现了特征。
因为trait对象的大小在编译时是未知的,所以它们必须放在指针后面。例如,如果
包含trait对象的变量/参数是fat指针,由以下组件组成:
看到我的答案了吗 What makes something a âtrait objectâ? 了解更多细节。 |
![]() |
3
2
“dyn”基本上告诉编译器,我们不知道编译时的类型是什么,它将在运行时确定。 这是因为编译器将在第一次使用使用泛型的函数调用时硬编码该类型而不是泛型类型。对同一函数的每一次调用都应使用与第一次调用相同的类型。 如果希望每次使用不同的类型对函数进行多次调用,则必须将泛型类型标记为“dyn”,这将导致在运行时每次调用该泛型类型时解析该泛型类型。 警告 与所有事情一样,实现额外的灵活性会带来性能损失,而这种情况肯定会带来性能损失。 我发现这篇博客文章非常清楚地解释了这个功能: https://medium.com/digitalfrontiers/rust-dynamic-dispatching-deep-dive-236a5896e49b 相关摘录:
vs
|
![]() |
tomm · 谷歌表格-将两列相乘,复制第三列 2 年前 |
![]() |
ziemsterr · 无法在SQL SELECT语句中找出此语法错误 2 年前 |
![]() |
Andrés BolÃvar · AJAX请求未收到我想要的属性 2 年前 |
![]() |
clarkk · 当声明向量时,(1)是什么意思? 2 年前 |
![]() |
Mike C. · Bash错误[:检查文件是否存在时缺少“]” 2 年前 |
![]() |
michael · 错误的脚本和语法问题 3 年前 |