“切片是一种引用,因此它没有所有权。”
以下代码经过简化。它需要使用 a 返回一个切片match。除了一个匹配臂之外,所有匹配臂都返回一个字符串切片。一只手臂需要在切片周围添加单引号,因此我们转向使用format!return String。然后该字符串必须转换为&str.
该错误表明生成的切片被匹配臂中的临时字符串引用。
11 | ret
| ^^^ returns a value referencing data owned by the current function
Run Code Online (Sandbox Code Playgroud)
简化后的代码如下。请注意,我们没有使用文字,而是&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
}
Run Code Online (Sandbox Code Playgroud)
&str是需要的,因为&str然后使用 推送push_str()。
fn main() {
let mut s = String::new();
s.push_str(my_func("a"));
...
Run Code Online (Sandbox Code Playgroud)
对于在匹配中复制 str …