fn wtf() -> (&'a str , String) {
let new_str = String::from("wtfwtf");
let res = &'a new_str[..]; //编译错误,我希望slice来自被move的对象,能够做到吗?
(res, new_str)
}
1
共 2 条评论, 1 页
fn wtf() -> (&'a str , String) {
let new_str = String::from("wtfwtf");
let res = &'a new_str[..]; //编译错误,我希望slice来自被move的对象,能够做到吗?
(res, new_str)
}
评论区
写评论生命周期不可以凭空出现的,它是个伴随属性,伴随在一个存在的变量。你是不可能割裂他们之间的关系的,假设你这个是可行的,我们提取出一个生命周期伴随这String,然后这个函数一定不是只调用一次的吧?就算只有一次 你这个String被摧毁了,那个指针&'a str怎么办?难道要引入一个null么?还是?所以这个想法是错误的,你只需要扔出这个String就好了,后面需要指针的时候再提取,但是要记住指针如果一定要抛出也是可以的,但是要伴随着一个变量的生命周期。 比如
fn get<'a>(so:String)->&'a str { &so }
这样不行的,String::from分配了新内存而且复制了, 作用域结束了就释放掉了