rust - Figuring out lifetime for reference from a consumed value -
rust - Figuring out lifetime for reference from a consumed value -
i have code that, simplified, looks this:
enum a<'a> { aconst(&'a [u8]) } trait froma { fn from_a(a) -> self; } impl froma &[u8] { fn from_a(a: a) -> &[u8] { match { aconst(bytes) => bytes } } } fn main() { // i'd utilize this: allow s = b"abc"; allow = aconst(s); allow foo: &[u8] = from_a(a); } this doesn't work, compiler complains missing lifetime specifiers on &[u8]. i'm not sure right lifetime be. from_a consumes argument, lifetime of returned reference cannot same lifetime of argument.
is possible somehow utilize lifetime annotations accomplish this? if is, right annotations be? can somehow create a type carry info lifetime of reference?
can somehow create a type carry info lifetime of reference?
that in fact doing when writing
enum a<'a> { //' aconst(&'a [u8]) //' } the total type here a<'a> meaning a carries within reference of lifetime 'a.
to correct, need propagate explicitly lifetime in trait definition , implementation :
trait froma<'a> { //' fn from_a(a<'a>) -> self; //' } impl<'a> froma<'a> &'a [u8] { //' fn from_a(a: a<'a>) -> &'a [u8] { match { aconst(bytes) => bytes } } } thus saying : lifetime of &[u8] piece lifetime of reference contained in a object.
you can :
fn main() { allow s = b"abc"; allow = aconst(s); allow foo: &[u8] = froma::from_a(a); println!("{}", foo); } [97, 98, 99] rust lifetime
Comments
Post a Comment