gpt4 book ai didi

rust - 函数,可变借用

转载 作者:行者123 更新时间:2023-11-29 08:35:41 26 4
gpt4 key购买 nike

我正在尝试了解所有权系统。为了测试它,我想创建一个借用 Vec 的函数,向其添加一个值并返回该值:

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) 的类型意味着它返回 () (单位类型)。要解决此问题,请删除 * :

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);
}

关于rust - 函数,可变借用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42681081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com