Почему объединение путей полностью заменяет исходный путь в Rust? - PullRequest
0 голосов
/ 22 ноября 2018

Я не понимаю, как 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

Я вижу в документах , что «нажатие на абсолютный путь заменяет существующий путь», но это кажется ужасной идеей, которая поймает много людей.

В таком случае, как мне безопасно обойти абсолютный путь или сделать его относительным?

1 Ответ

0 голосов
/ 22 ноября 2018

Это потому, что "/js/main.js" трактуется как абсолютный путь ( doc )

Если путь абсолютный, он заменяет текущий путь.

В Windows:

  • , если path имеет корень, но не имеет префикса (например, \ windows), он заменяет все, кроме префикса (если есть) в self.
  • если path имеет префикс, но не имеет корня, он заменяет self.

Если вы измените свой пример на "js/main.js", а затем используете join, он будет построен правильно( детская площадка )

...