返回一个 str语言 - 生锈生命周期



我在尝试返回字符串时遇到了一些麻烦。我一直在尝试各种方法来定义我的变量和返回值,以尝试使它能够返回字符串原语,但我收到一系列与生命周期相关的错误消息。

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

在这种情况下,您不能返回&str,因为它会指向out的内容,该内容在函数结束时超出了范围。您必须改为返回字符串out

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

Pling,
Plang,
Plong,
Other(u64)

,然后根据值打印响应。

最新更新