gpt4 book ai didi

rust - 接受与 Path 兼容的类型来生成 PathBuf?

转载 作者:行者123 更新时间:2023-11-29 08:23:36 31 4
gpt4 key购买 nike

我想持有一个PathBuf在我的结构中:

use std::path::{Path, PathBuf};

struct Foo {
p: PathBuf,
}

impl Foo {
fn new(p: PathBuf) -> Foo {
Foo { p }
}
}

像这样的东西适用于 Foo::new(Path::new("a").join("b")) , 但我也想支持 Foo::new(Path::new("a")) :

fn main() {
Foo::new(Path::new("a").join("b"));
// Foo::new(Path::new("a"));
}

我应该怎么做?是否可以用一种方法实现,还是应该使用两种方法?我知道 P: AsRef<Path> , 但在

的情况下似乎需要额外的副本
let p: PathBuf = Path::new("a").join("b");
let foo = Foo::new(p);

所以不适合我。

最佳答案

取一个可以转换的泛型类型Into一个 PathBuf:

use std::path::{Path, PathBuf};

struct Foo {
p: PathBuf,
}

impl Foo {
fn new<P>(p: P) -> Foo
where
P: Into<PathBuf>,
{
Foo { p: p.into() }
}
}

fn main() {
Foo::new(Path::new("a").join("b"));
Foo::new(Path::new("a"));
Foo::new("a");
}

关于rust - 接受与 Path 兼容的类型来生成 PathBuf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48772728/

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