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 接受与Path兼容的类型以生成PathBuf?_Rust - Fatal编程技术网

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”); }