假设:
PathBuf::new("foo.txt")
我收到错误:
this function takes 0 parameters but 1 parameter was supplied [E0061]
如果带有参数的方法在API文档中列出Methods from Deref部分,则不应该有效。我从该部分检查的几种方法适用于 PathBuf 。
答案 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
。