gpt4 book ai didi

rust - 如何在 Rust 中连接来自不同类型的多个部分的 Path?

转载 作者:行者123 更新时间:2023-12-02 17:59:24 24 4
gpt4 key购买 nike

文档提供了以下连接路径的示例:

use std::path::PathBuf;

let path: PathBuf = [r"C:\", "windows", "system32.dll"].iter().collect();

当所有组件都是字符串时,这才有效。但是,我正在尝试编写以下函数:

use std::path::PathBuf;
fn my_path<P: AsRef<Path>>(root: P, dir1: &str, dir2: &str, dir3: &str) -> PathBuf {
[root, dir1, dir2, dir3].iter().collect()
}

上面的显然行不通。我知道我可以进行一系列嵌套连接,但那就是……更丑陋。

有没有办法在数组中加入不同的类似路径的组件?

最佳答案

您可以将它们转换为动态 AsRef<Path>对象:

use std::path::{Path, PathBuf};
fn my_path<P: AsRef<Path>>(root: P, dir1: &str, dir2: &str, dir3: &str) -> PathBuf {
[&root as &dyn AsRef<Path>, &dir1, &dir2, &dir3].iter().collect()
}

或者只是使用 join 添加第一个不同的对象:

use std::path::{Path, PathBuf};
fn my_path<P: AsRef<Path>>(root: P, dir1: &str, dir2: &str, dir3: &str) -> PathBuf {
root.as_ref().join([dir1, dir2, dir3].iter().collect::<PathBuf>())
}

这里是Rust Playground

关于rust - 如何在 Rust 中连接来自不同类型的多个部分的 Path?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74814138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com