Rust编译报错:AsRef<Path>类型未找到join方法
解决Rust中
AsRef<Path>类型调用join方法的编译错误 你碰到的这个E0599错误,核心是对AsRef trait的用法理解有偏差~AsRef<std::path::Path>只是保证你的类型P可以转换成&std::path::Path引用,但P本身并没有join方法——join是Path和PathBuf类型的专属方法,不属于AsRef trait。
修复方案
只需要先通过as_ref()方法把P转换成&std::path::Path引用,再调用join就可以正常编译了:
use std::path::Path; fn test<P: AsRef<Path>>(path: P) { // 先转成&Path引用,再调用join方法 path.as_ref().join("13123123"); }
如果需要返回拼接后的完整路径(PathBuf类型),可以调整函数返回值:
use std::path::{Path, PathBuf}; fn test<P: AsRef<Path>>(path: P) -> PathBuf { path.as_ref().join("13123123") }
补充说明
AsRef<T> trait的设计目的是提供通用转换能力,让String、&str、PathBuf、&Path这类不同类型都能转换成&T引用。但要使用T的方法,必须手动调用as_ref()拿到真正的&T引用,编译器不会自动帮你完成这个转换步骤。
内容的提问来源于stack exchange,提问作者Rijenkii
相关产品推荐
相关产品推荐

