面试题答案
一键面试- 字符串处理
- 场景:处理长度不确定的文本字符串。在Rust中,
str
类型是DST,而&str
是常见的引用形式。例如,从文件中读取文本,文本长度在运行时才能确定。 - 作用:
&str
允许以统一的方式处理不同长度的字符串。它提供了对字符串数据的只读访问,且编译器不需要在编译时知道字符串的具体长度,使得处理各种来源的字符串变得方便,如let s: &str = "hello";
以及从文件读取文本时返回&str
。
- 场景:处理长度不确定的文本字符串。在Rust中,
- 动态数组
- 场景:创建大小在运行时确定的数组,例如从用户输入中收集一系列数字组成数组。Rust中的
[T]
是DST,而&[T]
(切片)是常用形式。 - 作用:切片
&[T]
可以指向内存中连续存储的T
类型元素序列,其长度在运行时确定。这使得可以高效地处理动态大小的数组数据,如传递数组的一部分给函数,并且避免了在编译时就确定数组大小的限制,例如let numbers: &[i32] = &[1, 2, 3];
。
- 场景:创建大小在运行时确定的数组,例如从用户输入中收集一系列数字组成数组。Rust中的
- Trait对象
- 场景:当需要以统一方式处理实现了同一trait的不同类型时,例如在图形绘制系统中,不同形状(如圆形、矩形)都实现了
Draw
trait,需要统一处理这些形状。 - 作用:Trait对象
&dyn Trait
(或Box<dyn Trait>
)是DST。它们允许将不同类型的对象统一看作实现了特定trait的对象,在运行时根据对象的实际类型来决定调用哪个具体的trait方法。例如,定义trait Draw { fn draw(&self); }
,然后可以有let shapes: Vec<Box<dyn Draw>> = vec![Box::new(Circle), Box::new(Rectangle)];
,这样可以通过统一的方式调用draw
方法,而不需要在编译时知道具体对象的类型。
- 场景:当需要以统一方式处理实现了同一trait的不同类型时,例如在图形绘制系统中,不同形状(如圆形、矩形)都实现了