Rust 从消耗值计算引用的生存期
我有一些代码,简化后如下:Rust 从消耗值计算引用的生存期,rust,lifetime,Rust,Lifetime,我有一些代码,简化后如下: enum A<'a> { AConst(&'a [u8]) } trait FromA { fn from_a(A) -> Self; } impl FromA for &[u8] { fn from_a(a: A) -> &[u8] { match a { AConst(bytes) => bytes } } } fn
enum A<'a> {
AConst(&'a [u8])
}
trait FromA {
fn from_a(A) -> Self;
}
impl FromA for &[u8] {
fn from_a(a: A) -> &[u8] {
match a {
AConst(bytes) => bytes
}
}
}
fn main() {
// I'd like to use it like this:
let s = b"abc";
let a = AConst(s);
let foo: &[u8] = from_a(a);
}
列举一个自我;
}
用于&[u8]的impl FromA{
fn来自_a(a:a)->和[u8]{
匹配{
acost(字节)=>字节
}
}
}
fn main(){
//我想这样使用它:
设s=b“abc”;
设a=a(s);
设foo:&[u8]=来自_a(a);
}
这不起作用,因为编译器抱怨和[u8]
上缺少生存期说明符。现在我不确定正确的寿命是多少。当a中的使用其参数时,返回引用的生存期显然不能与参数的生存期相同
是否有可能以某种方式使用生命周期注释来实现这一点?如果是,正确的注释是什么?我们是否可以让A
类型携带有关引用生存期的信息
我们是否可以让A
类型携带有关引用生存期的信息
事实上,这正是你写作时所做的
enum A<'a> { //'
AConst(&'a [u8]) //'
}
这样说:&[u8]
片的生存期是A
对象中包含的引用的生存期
然后,您可以执行以下操作:
fn main() {
let s = b"abc";
let a = AConst(s);
let foo: &[u8] = FromA::from_a(a);
println!("{}", foo);
}
[97, 98, 99]
太好了,谢谢。我尝试了一些类似的方法,但我一定错过了其中一个注释,错误消息让我感到困惑。
fn main() {
let s = b"abc";
let a = AConst(s);
let foo: &[u8] = FromA::from_a(a);
println!("{}", foo);
}
[97, 98, 99]