'&self.stringVal' 和 'self.stringVal.as_str()' 之间的区别



谁能告诉我返回Username&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 章)

一些程序员可能更喜欢一个简洁,而另一些程序员可能更喜欢另一个它的清晰度。

最新更新