返回一个str - Rust Lifetimes

时间:2017-07-13 01:30:29

标签: 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_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();
}

错误:

error[E0261]: use of undeclared lifetime name `'a`
 --> src/lib.rs:1:32
  |
1 | pub fn raindrops(int: u64) -> &'a str {
  |                                ^^ undeclared lifetime

error: aborting due to previous error

error: Could not compile `raindrops`.
Build failed, waiting for other jobs to finish...
error[E0261]: use of undeclared lifetime name `'a`
 --> src/lib.rs:1:32
  |
1 | pub fn raindrops(int: u64) -> &'a str {
  |                                ^^ undeclared lifetime

1 个答案:

答案 0 :(得分:4)

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

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

Pling,
Plang,
Plong,
Other(u64)

然后根据值打印响应。