我想要一个函数,它返回一个内部生成的更大字符串的 part,而不会导致返回部分的单独分配:
fn generate_full_string() -> String {"example: 123".to_owned()}
fn generate_partial_string() -> String {
generate_full_string()[9..].to_owned()
}
这里,generate_partial_string
具有所需的行为:它使用某种算法生成String
(这里用generate_full_string
建模),然后返回它的一部分,具体来说,从第9个字符开始的部分。根据我的理解,这里的问题是,当在从generate_string()[9..]
返回的str
上调用to_owned()
时,会创建一个新的堆分配来存储返回的部分字符串数据,并且将来自generate_string()[9..]
的部分串数据复制到其中。
相反,我希望重用在generate_full_string
中创建的分配,并使用它来存储返回的部分字符串。换句话说,我希望从generate_partial_string
返回的String
值指向generate_full_string
创建的堆分配的所需部分,以保存完整的字符串。
是否可以在安全的Rust中做到这一点?是否可以使用其他API模式从函数返回较大字符串的一部分,而不需要该函数从其调用者的作用域中获取String
的所有权?
1条答案
按热度按时间6yt4nkrj1#
您可以使用
.replace_range()
和一个空字符串来删除前缀: