<分区>
在返回 &'a str
的函数中,我创建了一个 String
。
我想返回一个与此 String
&'a str
fn givesString(A: &str) -> String {
String::from("example")
}
pub struct S<'a> {
pub strField: &'a str,
}
impl<'a> S<'a> {
pub fn from_String_A(A: &'a str) -> Result<Self, Box<dyn std::error::Error>> {
let processed_String = givesString(&A);
let processed_str: &'a str = a_processed_String.as_str();
Ok(Self {
strField: processed_str,
})
}
}
无法编译:借用的值 a_processed_String 生存时间不够长
,因为它在函数末尾被丢弃。
我知道 String
无论如何都会被丢弃。
但是现在,如果我创建一个 &'a str
并将其传递给返回值,它就可以毫无问题地编译:
fn givesString(A: &str) -> String {
String::from("example")
}
pub struct S<'a> {
pub strField: &'a str,
}
impl<'a> S<'a> {
pub fn from_String_A(A: &'a str) -> Result<Self, Box<dyn std::error::Error>> {
let longlife: &'a str = "hello from the outside of this fn";
Ok(Self {
strField: longlife,
})
}
}
那么,是否可以创建一个新的 &'a str
,而不是从将要删除的 String
中借用,而是简单地指向一些具有生命周期 'a
的内存,其内容与 String
?
有无数类似的问题,答案是简单地返回一个 String
,但假设我不能触及 givesString
的代码或结构 S