如何使用参数 运行 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>
。
鉴于:
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>
。