MST
星途 面试题库

面试题:Rust中字符串Deref强制转换在常见场景的应用

在Rust中,假设有一个自定义结构体`MyString`,它内部持有一个`String`类型的成员变量。请实现一个方法,该方法接收`&MyString`,但在方法内部需要将其当作`&str`来使用,解释并使用Deref强制转换来完成此操作。
20.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
struct MyString {
    inner: String,
}

impl MyString {
    fn as_str(&self) -> &str {
        // Deref强制转换,因为String实现了Deref<Target = str>
        // 这里MyString内部的String成员变量在需要&str的地方会自动通过Deref转换
        &self.inner
    }
}

解释:

  1. 首先定义了结构体MyString,它包含一个String类型的成员变量inner
  2. 然后在MyString的实现块中定义了as_str方法,这个方法接收&MyString类型的self
  3. 在方法内部,直接返回&self.inner。因为String类型实现了Deref<Target = str>,所以在需要&str类型的地方,&String类型的值会自动通过Deref强制转换为&str类型,从而满足题目要求将&MyString当作&str来使用。