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

时间:2015-05-21 01:18:29

标签: rust

假设:

PathBuf::new("foo.txt")

我收到错误:

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

如果带有参数的方法在API文档中列出Methods from Deref部分,则不应该有效。我从该部分检查的几种方法适用于 PathBuf

2 个答案:

答案 0 :(得分:3)

Methods from Deref下列出的方法仅适用于在PathBuf对象上调用方法时。本节介绍在Path上实施的方法,但由于Deref<Target=Path>上的PathBuf特征实施,这些方法可用。

new方法不会将self作为参数,因此Deref不适用(我认为这是此方法列出的错误)。我怀疑你没有注意方法的签名:它返回&Path,而不是PathBuf。那会告诉你这个方法与PathBuf无关。

答案 1 :(得分:3)

虽然确实无法在PathBuf上调用PathBuf方法,因为它是静态的,但从字符串中获取let p: PathBuf = "foo.txt".into(); 的正确方法只是使用泛型转换:

PathBuf

这是可能的,因为From为可以转换为对OsStr的引用的所有内容实现了impl<'a, T: ?Sized + AsRef<OsStr>> From<&'a T> for PathBuf

&str

并且AsRef<OsStr>确实实施了recv