函数,可变借用
Function, mutable borrow
我想了解所有权制度。为了测试它,我想创建一个借用 Vec
的函数,向其添加一个值并 returns 该值:
fn test(v1: &mut Vec<i32>) -> i32 {
*v1.push(10);
v1[3]
}
fn main() {
let mut vec: Vec<i32> = vec![10, 20, 30];
let i: <i32> = test(&mut vec);
}
我收到这两个错误:
error: expected `::`, found `=`
--> src/main.rs:8:16
|
8 | let i: <i32> = test(&mut vec);
| ^
error: type `()` cannot be dereferenced
--> src/main.rs:2:5
|
2 | *v1.push(10);
| ^^^^^^^^^^^^
将 =
更改为 ::
没有帮助,我不明白为什么会这样。
您不应该用 <>
包装所有类型。 <>
表示要指定泛型参数。这足够了:
let i: i32 = /* value */;
更重要的是,您根本不需要指定类型,编译器会自行推断类型。你可以只写:
let mut vec = vec![10, 20, 30];
let i = test(&mut vec);
这应该可以解决您的第二个问题。
第一个错误是因为您试图取消引用 ()
,这根本不是引用。
在 C(和 C++)中,我们有 2 个不同的访问运算符:
.
允许您访问结构字段(和 C++ 中的方法)
->
允许您访问指针后面结构的字段
Rust 向您隐藏了这些细节,所以您只需要使用 .
运算符。
Vec::<T>::push(&mut vec, val: T)
的类型表示returns()
(单位类型)。要解决此问题,请删除 *
:
fn test(v1: &mut Vec<i32>) -> i32 {
v1.push(10);
v1[3]
}
fn main() {
let mut vec = vec![10, 20, 30];
let i = test(&mut vec);
}
我想了解所有权制度。为了测试它,我想创建一个借用 Vec
的函数,向其添加一个值并 returns 该值:
fn test(v1: &mut Vec<i32>) -> i32 {
*v1.push(10);
v1[3]
}
fn main() {
let mut vec: Vec<i32> = vec![10, 20, 30];
let i: <i32> = test(&mut vec);
}
我收到这两个错误:
error: expected `::`, found `=`
--> src/main.rs:8:16
|
8 | let i: <i32> = test(&mut vec);
| ^
error: type `()` cannot be dereferenced
--> src/main.rs:2:5
|
2 | *v1.push(10);
| ^^^^^^^^^^^^
将 =
更改为 ::
没有帮助,我不明白为什么会这样。
您不应该用 <>
包装所有类型。 <>
表示要指定泛型参数。这足够了:
let i: i32 = /* value */;
更重要的是,您根本不需要指定类型,编译器会自行推断类型。你可以只写:
let mut vec = vec![10, 20, 30];
let i = test(&mut vec);
这应该可以解决您的第二个问题。
第一个错误是因为您试图取消引用 ()
,这根本不是引用。
在 C(和 C++)中,我们有 2 个不同的访问运算符:
.
允许您访问结构字段(和 C++ 中的方法)->
允许您访问指针后面结构的字段
Rust 向您隐藏了这些细节,所以您只需要使用 .
运算符。
Vec::<T>::push(&mut vec, val: T)
的类型表示returns()
(单位类型)。要解决此问题,请删除 *
:
fn test(v1: &mut Vec<i32>) -> i32 {
v1.push(10);
v1[3]
}
fn main() {
let mut vec = vec![10, 20, 30];
let i = test(&mut vec);
}