为什么连接路径完全取代了Rust中的原始路径? [英] Why does joining paths completely replace the original path in Rust?

查看:23
本文介绍了为什么连接路径完全取代了Rust中的原始路径?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不明白Rust如何连接文件路径。为什么这个不起作用:

fn main() {
    let root = std::path::Path::new("resources/");
    let uri = std::path::Path::new("/js/main.js");
    let path = root.join(uri);
    assert_eq!(path.to_str(), Some("resources/js/main.js"));
}

失败,错误为:

thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `Some("/js/main.js")`,
 right: `Some("resources/js/main.js")`', src/main.rs:5:5

我在the docs中看到"推一条绝对路径取代现有路径",但这似乎是一个糟糕的想法,会吸引很多人。

在这种情况下,如何安全地剥离绝对路径或使其成为相对路径?

推荐答案

这是因为"/js/main.js"被视为绝对路径(doc)

如果路径是绝对路径,它将替换当前路径。

在Windows上:

  • 如果path有根但没有前缀(例如Windows),它将替换除self的前缀(如果有)之外的所有内容。
  • 如果path有前缀但没有根,它将替换self

如果您将示例更改为"js/main.js",然后使用join,它将被正确构造(playground)

这篇关于为什么连接路径完全取代了Rust中的原始路径?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆