将 mut 引用传递给一个函数,然后取回它
Pass mut reference to a function, and get it back
我试着写了一个小时以来的代码示例,谁在 String
中添加了一些空格。所以主要借用一个字符串给一个添加空格的函数,然后,我想在主要函数中取回字符串。
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
功能。
你能告诉我我哪里错了吗,请问这个问题的解决方案是什么?我知道这是一个常见问题,但我在 Whosebug 上看不到任何简单的问题。
您无需 return 任何操作:您收到了对函数调用者已有的结构的引用。
随心所欲
fn main() {
let mut line = String::new();
make_spaces(5, &mut line);
// use line here
}
fn make_spaces(number: u8, string: &mut String) {
for _ in 0..number {
string.push(' ');
}
}
有两种方法可以完成您正在尝试的操作,但您将两者混合使用:
以一个可变参数作为参考
fn main() {
let mut line = String::new();
make_spaces(5, &mut line);
}
fn make_spaces(number: u8, string: &mut String) {
for _ in 0..number {
string.push(' ');
}
}
在这种情况下,调用者会为您提供对结构的引用,以便您可以就地修改它。不需要 return 任何东西。
将参数移动到函数中,然后return修改后的值
fn main() {
let mut line = String::new();
line = make_spaces(5, line);
}
fn make_spaces(number: u8, mut string: String) -> String {
for _ in 0..number {
string.push(' ');
}
string
}
在这种情况下,字符串被移入 make_spaces
函数,因此您需要通过 returning 将其移回调用方。
我试着写了一个小时以来的代码示例,谁在 String
中添加了一些空格。所以主要借用一个字符串给一个添加空格的函数,然后,我想在主要函数中取回字符串。
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
功能。
你能告诉我我哪里错了吗,请问这个问题的解决方案是什么?我知道这是一个常见问题,但我在 Whosebug 上看不到任何简单的问题。
您无需 return 任何操作:您收到了对函数调用者已有的结构的引用。
随心所欲
fn main() {
let mut line = String::new();
make_spaces(5, &mut line);
// use line here
}
fn make_spaces(number: u8, string: &mut String) {
for _ in 0..number {
string.push(' ');
}
}
有两种方法可以完成您正在尝试的操作,但您将两者混合使用:
以一个可变参数作为参考
fn main() {
let mut line = String::new();
make_spaces(5, &mut line);
}
fn make_spaces(number: u8, string: &mut String) {
for _ in 0..number {
string.push(' ');
}
}
在这种情况下,调用者会为您提供对结构的引用,以便您可以就地修改它。不需要 return 任何东西。
将参数移动到函数中,然后return修改后的值
fn main() {
let mut line = String::new();
line = make_spaces(5, line);
}
fn make_spaces(number: u8, mut string: String) -> String {
for _ in 0..number {
string.push(' ');
}
string
}
在这种情况下,字符串被移入 make_spaces
函数,因此您需要通过 returning 将其移回调用方。