Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 从消耗值计算引用的生存期_Rust_Lifetime - Fatal编程技术网

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]