【发布时间】:2023-03-11 04:44:01
【问题描述】:
我从一个小时开始尝试编写代码示例,在String 中添加了一些空格。所以main借了一个String给添加空格的函数,然后,我想在main函数中取回字符串。
fn main() {
...
let mut line = String::new();
line = make_spaces(5, &mut line);
}
fn make_spaces(number: u8, string: &mut String) -> &mut String {
for _ in 0..number {
string.push(' ');
}
string
}
但是借用检查器给了我以下错误:
error[E0308]: mismatched types
--> src/main.rs:14:12
|
14 | line = make_spaces(left_spaces, &mut line);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| expected struct `String`, found `&mut String`
| help: try using a conversion method: `make_spaces(left_spaces, &mut line).to_string()`
我是rust 的新手,我知道我不懂借贷。但是我在网上搜了一下,还是不太明白。
据我了解,我将line 所有权授予make_spaces 函数,然后我(尝试)将string 的所有权还给main 函数。
你能告诉我我错在哪里吗?请问这个问题的解决方案是什么?我知道这是一个常见问题,但我在 stackoverflow 上没有看到任何简单的问题。
【问题讨论】:
-
你为什么要返回一个参考?一个更有用的模式是什么都不返回。没有必要:调用者已经有了修改后的结构。
-
你的函数返回一个
mutable reference to string,但line的类型是mutable String。所以你试图分配一个不正确的类型。
标签: rust borrow-checker ownership