gpt4 book ai didi

string - 从 `&' 中获取比当前函数更长生命周期的 str` `String`

转载 作者:行者123 更新时间:2023-11-29 08:28:10 25 4
gpt4 key购买 nike

<分区>

在返回 &'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,
})
}
}

playground

无法编译:借用的值 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,
})
}
}

playground

那么,是否可以创建一个新的 &'a str,而不是从将要删除的 String 中借用,而是简单地指向一些具有生命周期 'a 的内存,其内容与 String ?

相同

有无数类似的问题,答案是简单地返回一个 String,但假设我不能触及 givesString 的代码或结构 S

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com