谁能告诉我返回User
name
的&str
值的两种方法有什么区别?两者都编译,但我不确定是否有首选的。
pub struct User {
name: String,
}
impl User {
pub fn name(&self) -> &str {
// way1
&self.name
// way2
// self.name.as_str()
}
}
在String
上使用&
会给出一个&String
,并依赖于 deref 强制来达到所需的&str
类型,但as_str
明确地给出了一个&str
(同时在内部使用 deref 强制)。如果没有强制,人们将不得不写&s[..]
才能将String s
变成&str
。
Deref 强制将对实现
Deref
特征的类型的引用转换为对另一个类型的引用。例如,deref 强制可以将&String
转换为&str
,因为String
实现Deref
特征,使其返回&str
.Deref 胁迫是一个 方便 Rust 对函数和方法的参数执行,以及 仅适用于实现Deref
特征的类型。它发生了 当我们将对特定类型值的引用传递为 与参数不匹配的函数或方法的参数 键入函数或方法定义。对deref
方法将我们提供的类型转换为类型 参数需求。-- Rust 编程语言(第 15 章)
一些程序员可能更喜欢一个简洁,而另一些程序员可能更喜欢另一个它的清晰度。