"切片是一种引用类型,因此它没有所有权。"
以下代码简化了操作,使用了一个匹配表达式(match)返回一个切片(slice),除了一种情况,其他情况返回了一个字符串切片。在一个情况下需要在切片周围添加单引号,因此我们使用返回一个字符串(String)的'format!'函数。然后将String转换为'&str'。
错误显示匹配表达式中的临时String引用了结果切片。
以下是简化后的代码。请注意,我们不是使用字面值,而是从第三方包返回的
以下代码简化了操作,使用了一个匹配表达式(match)返回一个切片(slice),除了一种情况,其他情况返回了一个字符串切片。在一个情况下需要在切片周围添加单引号,因此我们使用返回一个字符串(String)的'format!'函数。然后将String转换为'&str'。
错误显示匹配表达式中的临时String引用了结果切片。
11 | ret
| ^^^ returns a value referencing data owned by the current function
以下是简化后的代码。请注意,我们不是使用字面值,而是从第三方包返回的
&str
。fn my_func(input: &str) ->&str {
let ret =
match input {
"a" => "Apha", // in fact, a &str from a crate
_ => format!("'{}'", "Quoted" ).as_str(),
};
ret
}
&str
是期望的类型,因为这样可使用 push_str()
推送字符串。
fn main() {
let mut s = String::new();
s.push_str(my_func("a"));
...
您在match中是建议复制str还是解引用临时字符串?
input: &str
中的匿名生命周期 - 如果我写成input: &'a str
,那么类型将是Cow<'a, str>
。如果您不想将输出生命周期绑定到输入字符串,则可以将其更改为Cow<'static, str>
。 - John Kugelman