Rust 关于所有权/使用寿命的困惑
以下是一些将两件事合并为一件事的函数:Rust 关于所有权/使用寿命的困惑,rust,Rust,以下是一些将两件事合并为一件事的函数: //没错。调用时将v1/v2的所有权移入,完成时将v的所有权移回。 fn组合_v(v1:Vec,v2:Vec)->Vec{ 设v=vec![1,2,3]; 返回v; } //终生声明是正确的。我可以返回一个`&str`类型变量。 fn联合收割机(v1:&'a[i32],v2:&'a[i32])->&'a[i32]{ 设a=[1,2,3]; //无法返回对局部变量'a'的引用` 回报&a; } //这是不对的。 //错误:编译时无法知道“%i32]”类型的值
//没错。调用时将v1/v2的所有权移入,完成时将v的所有权移回。
fn组合_v(v1:Vec,v2:Vec)->Vec{
设v=vec![1,2,3];
返回v;
}
//终生声明是正确的。我可以返回一个`&str`类型变量。
fn联合收割机(v1:&'a[i32],v2:&'a[i32])->&'a[i32]{
设a=[1,2,3];
//无法返回对局部变量'a'的引用`
回报&a;
}
//这是不对的。
//错误:编译时无法知道“%i32]”类型的值的大小
fn组合_1(v1:[i32],v2:[i32])->[i32]{
设a=[1,2,3];
返回a;
}
所以我有问题:
&str
类型,但不能返回&[i32]
?为什么函数完成时不删除&str
的值&[i32]
s并返回新&[i32]
的函数[i32]
s并返回新[i32]
的函数[i32]
必须有长度,而&[i32]
没有以下是您的子问题的答案: 1) 为什么可以返回
&str
类型,但不能返回&[i32]
?为什么函数完成时不删除&str
的值
因为当您的代码编译时,它被称为“静态”生存期。因此,当函数完成时,它不会被丢弃
2) 如何编写一个函数来接受&[i32]
s,并返回一个新的&[i32]
函数的签名是正确的。但在实现中,您需要使用'static
生存期指定声明,或者至少以编译器可以将其称为'static
的方式编写声明
3) 当编译时无法确定长度时,如何编写一个接受[i32]
s并返回新[i32]
的函数
要想使用它们,您需要使用框
,并更改函数签名,如下所示:
fn联合收割机1(v1:Box,v2:Box)->Box
4) 为什么[i32]
必须有长度,而&[i32]
没有
锈迹中基本上有两种形式的阵列:
是一个由[T;N]
N
s组成的数组,它的大小是T
的
是一个只有在运行时才知道大小的[T]
数组,它不是T
,实际上只能作为一个切片进行操作大小的
(&[T])
一个问题中有这么多问题顺便说一句:@Stargateur的可能重复我将把它分解成几个小问题