gpt4 book ai didi

function - 我想将一个向量的引用传递给一个函数,然后在那里修改它并作为向量返回

转载 作者:行者123 更新时间:2023-11-29 08:31:03 24 4
gpt4 key购买 nike

我想将包含 i64 值的向量的地址作为参数传递给函数,然后我希望我的函数在其原始位置修改向量并将修改后的向量作为 返回i64.

我尝试将向量的可变引用传递给函数并尝试对其进行修改,但编译器显示错误:存在具有相似名称的结构和错误:找到预期类型的​​宏等。

fn main() {
let mut my_vector: Vec<i64> = Vec::new();
my_vector.push(11);
my_vector.push(12);
my_vector.push(13);
println!("{:?}", my_vector);
let vec_ref: &[vec<i64>] = &my_vector;
let v2 = change_vector(&mut vec_ref);
println!("{:?}", v2);
println!("{:?}", my_vector);
}

fn change_vector(new_vector: &[vec<i64>]) -> Vec<i64> {
new_vector.push(11);
new_vector
}

( Playground )

我希望我的函数 change_vector() 接收对 my_vector 位置的引用,对其进行修改,然后将其作为向量返回。它没有发生,编译器显示错误并中止:

error[E0573]: expected type, found macro `vec`
--> src/main.rs:7:20
|
7 | let vec_ref: &[vec<i64>] = &my_vector;
| ^^^^^^^^
help: a struct with a similar name exists
|
7 | let vec_ref: &[Vec<i64>] = &my_vector;
| ^^^
help: use `!` to invoke the macro
|
7 | let vec_ref: &[vec!] = &my_vector;
| ^^^^

error[E0573]: expected type, found macro `vec`
--> src/main.rs:13:32
|
13 | fn change_vector(new_vector: &[vec<i64>]) -> Vec<i64> {
| ^^^^^^^^
help: a struct with a similar name exists
|
13 | fn change_vector(new_vector: &[Vec<i64>]) -> Vec<i64> {
| ^^^
help: use `!` to invoke the macro
|
13 | fn change_vector(new_vector: &[vec!]) -> Vec<i64> {
| ^^^^

如有任何帮助,我将不胜感激。

最佳答案

由于不正确的语法和目标,您的代码存在很多问题。让我们一一浏览:

let mut my_vector: Vec<i64> = Vec::new();
my_vector.push(11);
my_vector.push(12);
my_vector.push(13);
println!("{:?}", my_vector);

这很好。 my_vector包含 [11, 12, 13] .

let vec_ref: &[vec<i64>] = &my_vector;

这不好。对 Vec<i64> 的引用是&Vec<i64> ,不是一片。将其更改为 let vec_ref:&Vec<i64> = &my_vector; .您也不需要此行,如果您决定稍后使用此引用,您的代码将由于稍后的决定而停止编译,我们将要进行...

let v2 = change_vector(&mut vec_ref);

这不好。您不能获取不可变引用的可变引用。按理说。 change_vector(&mut my_vector)语法上没问题,但结合前面的作业,是一个雷区。你已经获得了一个不可变的引用作为 vec_ref在上面的线上;如果你不使用 vec_ref编译器会为你完全放弃它;但是,如果您决定使用它,您的代码将无法编译,因为您无法同时持有不可变的可变的借用。

fn change_vector(new_vector: &[vec<i64>]) -> Vec<i64> {

由于上述原因,这并不好。应该是fn change_vector(new_vector: &mut Vec<i64>) { .

返回类型改变的原因是你不能返回拥有的 Vec来自没有分配的引用。如果您确实想要分配,那么显然这应该有所不同。

new_vector.push(11);

这很好。

new_vec

有了新的返回签名,这一行就多余了。

更正后的代码可见here

关于function - 我想将一个向量的引用传递给一个函数,然后在那里修改它并作为向量返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57839662/

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