Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 为什么连接路径会完全替换生锈的原始路径?_Rust_Filepath - Fatal编程技术网

Rust 为什么连接路径会完全替换生锈的原始路径?

Rust 为什么连接路径会完全替换生锈的原始路径?,rust,filepath,Rust,Filepath,我不明白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")); } 在以下情况下失败: 线程

我不明白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"));
}
在以下情况下失败:

线程“main”在“断言失败:`(左==右)时惊慌失措`
左:`Some(“/js/main.js”)`,
右:`Some(“resources/js/main.js”)`,src/main.rs:5:5
我看到“推动一条绝对路径取代现有路径”,但这似乎是一个可怕的想法,会吸引很多人

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

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

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

在Windows上:

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

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

我想您可以看到:discussion@Stoogy谢谢我已经对这个问题发表了评论。谢谢,那么如何将传入路径始终视为相对路径呢?仅供参考:
os.path.join
在Python中具有相同的行为。我不知道为什么,但至少有一些一致性。@PetrusTheron我建议根本不要使用
/
。你可以完全忽略它们。@TimDiekmann引用:“绝对化和规范化方法的区别在于绝对化不关心文件是否存在以及文件的真实内容。”;)@您可以使用PetrusTheron删除前导的
/