Rust 在具有可变借用的函数中,返回类型的影响是什么?

Rust 在具有可变借用的函数中,返回类型的影响是什么?,rust,Rust,Rust中的以下代码生成并运行: fn func(s: &mut String) -> i32 { s.push_str("!"); println!("{}", s); 1 } fn main() { let mut x = String::from("hello world"); let v = func(&mut x); println!("{}", v); let r = &x[..]; pr

Rust中的以下代码生成并运行:

fn func(s: &mut String) -> i32 {
    s.push_str("!");
    println!("{}", s);
    1
}

fn main() {
    let mut x = String::from("hello world");
    let v = func(&mut x);
    println!("{}", v);
    let r = &x[..];
    println!("{}", r);
}
如果将
func
的返回类型更改为
&str
,我将得到

error[E0502]:无法将'x'借用为不可变的,因为它也是借用为可变的
-->src/main.rs:11:18
|
9 |设v=func(&mut x);
|-此处发生可变借用
10 | println!(“{}”,五);
11 |设r=&x[…];
|^此处发生不可变借用
12 | println!(“{}”,r);
13 |     }
|-可变借用结束于此

我知道在给定的范围内,只允许一个可变引用,但返回类型如何重要?

这个问题基本上是重复的,但我已经使用并收回了我的金徽章dupe hammer。当这已作为复制关闭时,请告诉我,我将删除此答案


如果不返回引用,则不能进行借阅

如果
func
的返回类型更改为
&str

然后,由于,该函数等价于:

fn func<'a>(s: &'a mut String) -> &'a str
另见:


这基本上是的复制品,但我已经使用并取出了我的金徽章dupe hammer。当这已作为重复关闭时,请告诉我,我将删除我的答案。可能需要明确指出的是,引入另一个生存期参数,
fn func(s:&'a mut String)->&'b str
可以修复它吗?
fn func(s: &mut String) -> &'static str {
    ""
}