假设我正在编写一个函数,该函数修剪&str
左右的空格,然后将其解析为泛型类型(这是一个简化的示例:我的实际函数是从正则表达式中获取几个捕获组).
fn trim_and_parse<T: FromStr>(s: &str) -> T {
s.trim().parse().unwrap()
}
例如,我可以这样做
let n: u32 = trim_and_parse(" 24 ");
let inner: String = trim_and_parse(" hi ");
这很有效,但第二个是分配新的String
.如果我可以返回输入的一部分,我会很高兴的:
let inner: &str = trim_and_parse(" hi ");
这是行不通的,因为&str
不是FromStr
,我不确定它是否真的有意义.有没有什么我可以做的来使这个接口工作,这样如果我使用u32
作为类型参数,那么它就会将经过修剪的字符串解析成一个数字,但是我可以使用其他的类型参数来获得原始字符串的一部分?
我试着做一些实验,比如
trait MyFromStr {
fn from_str(s: &str) -> Self;
}
impl MyFromStr for &str {
fn from_str(s: &str) -> Self {
s
}
}
得到lifetime may not live long enough
分,这是很公平的.有没有其他方法可以让这件事奏效?