尝试了解 Rust 在 std::path::Path::as_ref 中的魔力

问题描述 投票:0回答:1

以下实现来自 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)
    }
}

据我理解代码,该函数应该返回一个引用(根据签名),但它似乎返回一个拥有的对象。

现在有两件事我不明白:

  1. 为什么拥有的对象会“自动”转换为引用
  2. 当拥有的对象运行时,为什么这不会产生运行时错误 超出范围并在函数返回时被删除

感谢您的努力,回答我的问题

rust
1个回答
0
投票

这里存在一些不同的误解。让我们拆开其中一些:

为什么拥有的对象会“自动”转换为引用

这里没有任何东西。

Path
不是自有结构,
PathBuf
是。数值已经是参考了。

当拥有的对象超出范围并被删除时,为什么这不会产生...错误?

因为这里没有拥有价值。此方法采用对字符串切片 (

str
) 的引用(此处标记为
&self
),并返回基于它的 Path 引用。在底层内存字符串切片超出范围之前,它不会失效。

© www.soinside.com 2019 - 2024. All rights reserved.