以下实现来自 Rust 标准库 (https://doc.rust-lang.org/src/std/path.rs.html#3289):
impl AsRef<Path> for str {
#[inline]
fn as_ref(&self) -> &Path {
Path::new(self)
}
}
据我理解代码,该函数应该返回一个引用(根据签名),但它似乎返回一个拥有的对象。
现在有两件事我不明白:
感谢您的努力,回答我的问题
这里存在一些不同的误解。让我们拆开其中一些:
为什么拥有的对象会“自动”转换为引用
这里没有任何东西。
Path
不是自有结构,PathBuf
是。数值已经是参考了。
当拥有的对象超出范围并被删除时,为什么这不会产生...错误?
因为这里没有拥有价值。此方法采用对字符串切片 (
str
) 的引用(此处标记为 &self
),并返回基于它的 Path 引用。在底层内存字符串切片超出范围之前,它不会失效。