type
status
date
slug
summary
tags
category
icon
password
Property
Sep 5, 2023 12:44 PM
我们先来看这样一段代码:
我们看到
Button
和Text
都实现了View
属性, 抽象是一种不错的设计程序的方法, 帮助我们透明化的使用外部提供的API. 然后我们可能会下意识的写出下面的代码:这段代码无法通过编译, 原因就是返回值
View
需要在编译器确认大小. 我们需要把它装成一个胖指针.嗯,这样就好很多. 但是编译器会爆种, 提出一个警告, 希望你把
Box<View>
改为Box<dyn View>
.这又是什么意思?
dyn
是动态的缩写, 意义其实很明显. 使用dyn
修饰的类型, 会在程序执行期动态分发. 会有一定的RUNTIME开销.现在我们把代码改成这样, 好多了.
接下来说说
impl
, 这个语法是个语法糖其实.怎么个语法糖呢?真的就这么简单.
第二次说一遍, 这种
T(泛型)
写法在入参可以这么做, 但是返回值不行. 除非你的返回值只返回一个T
实现. 两种以上请重载 (我乱说的,rust可能不支持)
或者使用dyn
.- 作者:sdttttt
- 链接:https://www.sdttttt.site/article/13bb4fc4-dda1-450c-9674-aae3524bae32
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。