返回str-Rust生命周期

返回str-Rust生命周期,rust,Rust,我在尝试返回字符串时遇到了一些麻烦。我一直在尝试各种方法来定义变量和返回值,以便返回字符串原语,但我得到了一个与生命周期相关的错误消息数组 pub fn raindrops(int: u64) -> &'a str { let mut out = String::new(); if int % 3 == 0 { out.push_str("Pling"); } if int % 5 == 0 { out.push_s

我在尝试返回字符串时遇到了一些麻烦。我一直在尝试各种方法来定义变量和返回值,以便返回字符串原语,但我得到了一个与生命周期相关的错误消息数组

pub fn raindrops(int: u64) -> &'a str {
    let mut out = String::new();

    if int % 3 == 0 {
        out.push_str("Pling");
    }
    if int % 5 == 0 {
        out.push_str("Plang");
    }
    if int % 7 == 0 {
        out.push_str("Plong");
    }
    if out.is_empty() {
        out.push_str(&format!("{}", int));
    }

    out.shrink_to_fit();

    return out.as_str();
}
错误:

错误[E0261]:使用未声明的生存期名称“%a”`
-->src/lib.rs:1:32
|
1 |发布fn雨滴(int:u64)->&a街{
|^^未声明的生存期
错误:由于上一个错误而中止
错误:无法编译“Raindropes”。
生成失败,正在等待其他作业完成。。。
错误[E0261]:使用未声明的生存期名称“%a”`
-->src/lib.rs:1:32
|
1 |发布fn雨滴(int:u64)->&a街{
|^^未声明的生存期

在这种情况下,您不能返回
&str
,因为它将指向函数末尾超出范围的
out
的内容。您必须返回字符串
out

或者,如果要限制分配,可以返回一个枚举,该枚举可以是:

Pling,
Plang,
Plong,
Other(u64)

然后根据值打印响应。

这很有效!谢谢,我想我把它复杂化了。作为优化,可以返回Cow而不是字符串。这将确保在返回静态字符串时不会发生动态分配。您可能会发现这很有趣