Rust中实现的TryFrom<Vec<T>>为何未覆盖TryFrom<Vec<String>>?
问题根因
- 你的泛型实现中对
T的约束包含AsRef<String>,但Rust标准库从未为String类型实现AsRef<String>trait,仅为String实现了AsRef<str>。当你传入Vec<String>时,T = String不满足你定义的约束条件,因此该泛型实现不会生效,编译器才会提示trait bound不满足。
修复方案
你可以根据自己的需求选择任意一种方案:
方案1:修改泛型约束,兼容多种字符串类型
将AsRef<String>替换为AsRef<str>,原有实现逻辑无需改动:
use std::convert::TryFrom; impl<T: Debug + AsRef<str> + Into<String> + Clone> TryFrom<Vec<T>> for Positionals { // 保留你原来的实现代码 }
该方案不仅可以覆盖Vec<String>的场景,还可以兼容Vec<&str>等其他可转换为字符串引用的类型,适用范围更广。
方案2:删除泛型,直接写具体类型实现
如果你只需要支持Vec<String>这一种输入类型,完全可以去掉泛型写死实现,代码更简洁无额外泛型开销:
use std::convert::TryFrom; impl TryFrom<Vec<String>> for Positionals { // 保留你原来的实现代码 }
内容的提问来源于stack exchange,提问作者Evan Carroll
相关产品推荐
相关产品推荐

