考虑这个函数,它应该返回给定
错误信息如下:
Path
的文件扩展名。pub fn get_extension<'a>(path: &'a Path) -> Option<&'a str> {
let path_str = path.as_str().unwrap();
let ext_pos = regex!(".[a-z0-9]+$").find(path_str);
match ext_pos {
Some((start, _)) => {
return Some(path_str.as_slice().slice_from(start))
},
None => return None
}
}
错误信息如下:
`path_str` does not live long enough
错误信息很清楚,可惜我自己无法解决。理论上我理解,但仍有一些模糊的地方。
我理解编译器要告诉我path_str
的寿命不足以作为标记有生命周期'a
的返回值有效。
但这就是我的疑问所在:
我明白对
path
(输入参数)的引用应该恰好与包含在Option
(输出参数)中的str
的引用相同寿命。由于我们返回
Some(path_str.as_slice().slice_from(start))
,实际上意味着path_str
需要和path
具有相同的寿命。
我不明白的是为什么path_str
的生命周期不够长,我该如何修复?是什么导致它过早死亡?
更新
正如评论中指出的,并且在IRC上也指出,去掉多余的as_slice()
使代码编译通过。有人知道原因吗?还指出存在一个方法可以直接获取扩展名。但是,我更想了解问题的背后故事。