Rust 接受与Path兼容的类型以生成PathBuf?
我想在我的结构中保存一个Rust 接受与Path兼容的类型以生成PathBuf?,rust,Rust,我想在我的结构中保存一个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”): 我该怎么做?是否可以使用一种
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”)
:
我该怎么做?是否可以使用一种方法实现,还是应该使用两种方法?我知道关于P:AsRef
,但看起来它需要额外的副本以防
let p: PathBuf = Path::new("a").join("b");
let foo = Foo::new(p);
因此,它不适合我。采用可转换为
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");
}
使用std::path::{path,PathBuf};
结构Foo{
p:PathBuf,
}
impl-Foo{
fn新的(P:P)->Foo
哪里
P:,
{
Foo{p:p.into()}
}
}
fn main(){
Foo::new(路径::new(“a”)。join(“b”);
Foo::new(路径::new(“a”);
Foo::新的(“a”);
}
采用可转换为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");
}
使用std::path::{path,PathBuf};
结构Foo{
p:PathBuf,
}
impl-Foo{
fn新的(P:P)->Foo
哪里
P:,
{
Foo{p:p.into()}
}
}
fn main(){
Foo::new(路径::new(“a”)。join(“b”);
Foo::new(路径::new(“a”);
Foo::新的(“a”);
}