如何使用参数 运行 PathBuf::new

How to run PathBuf::new with an argument

鉴于:

PathBuf::new("foo.txt")

我收到一个错误:

this function takes 0 parameters but 1 parameter was supplied [E0061]

考虑到带有参数的方法列在 API 文档的 Methods from Deref 部分下,它不应该起作用吗?我从该部分检查过的几种方法适用于 PathBuf.

Methods from Deref 下列出的方法仅适用于在 PathBuf 对象上调用方法。本节描述了在 Path 上实现的方法,但由于 PathBuf 上的 Deref<Target=Path> 特性实现,这些方法可用。

new方法没有将self作为参数,所以Deref不适用(我认为这里列出这个方法是一个错误)。我怀疑您没有注意方法的签名:它 returns 是 &Path,而不是 PathBuf。那会告诉您该方法与 PathBuf.

无关

虽然确实不可能通过 PathBuf 调用 Path::new() 方法,因为它是静态的,但从字符串中获取 PathBuf 的正确方法是使用通用转换:

let p: PathBuf = "foo.txt".into();

这是可能的,因为 PathBuf 为可以转换为对 OsStr 的引用的所有内容实施 From:

impl<'a, T: ?Sized + AsRef<OsStr>> From<&'a T> for PathBuf

并且 &str 确实实现了 AsRef<OsStr>