Whoops, excluded the mailing list.
On 22 March 2014 11:53, Edward Wang <edward.yu.w...@gmail.com> wrote: > `to_encode_object` has type `Encodable<Encoder<'a>>` so > `to_encode_object.encode(...)` > requires an Encoder instance with lifetime 'a, the one defined in the > struct bound. > > The problem I think is that I can't write: > > pub fn buffer_encode<T:Encodable<_>>(to_encode_object: &T) -> ~[u8] { > > let mut m = MemWriter::new(); > { > let mut encoder = Encoder::new(&mut m as &mut io::Writer); > to_encode_object.encode(&mut encoder); > } > m.unwrap() > } > > and ask rustc to infer a proper type parameter. That would be global > inference. > > -Ed > > > On Sat, Mar 22, 2014 at 11:43 PM, Josh Matthews <j...@joshmatthews.net>wrote: > >> "m here is merely a local variable but Encoder<'a> requires a lifetime at >> least 'a" >> >> This statement does not make sense to me. Why does m's lifetime not >> satisfy the requirement? >> >> Cheers, >> Josh >> >> >> On 22 March 2014 10:24, Edward Wang <edward.yu.w...@gmail.com> wrote: >> >>> Hi, >>> >>> I'm in the process of fixing a `ty_trait` variance inference bug, which >>> will void the following code in json.rs: >>> >>> pub struct Encoder<'a> { >>> priv wr: &'a mut io::Writer, >>> priv error: io::IoResult<()>, >>> } >>> impl<'a> Encoder<'a> { >>> pub fn new<'a>(wr: &'a mut io::Writer) -> Encoder<'a> { >>> Encoder { wr: wr, error: Ok(()) } >>> } >>> >>> pub fn buffer_encode<T:Encodable<Encoder<'a>>>(to_encode_object: &T) >>> -> ~[u8] { >>> let mut m = MemWriter::new(); >>> { >>> let mut encoder = Encoder::new(&mut m as &mut io::Writer); >>> to_encode_object.encode(&mut encoder); >>> } >>> m.unwrap() >>> } >>> } >>> >>> If taking a close look, m here is merely a local variable but >>> Encoder<'a> requires a lifetime at least 'a. A naive fix would be: >>> >>> let mut encoder = Encoder::new(cast::transmute_mut_region(&mut m)); >>> >>> But of course, it is very uncivilized :) Any suggestion on how to >>> refactor this piece of code so it won't violate the lifetime requirement? >>> >>> Regards, >>> Edward >>> >>> _______________________________________________ >>> Rust-dev mailing list >>> Rust-dev@mozilla.org >>> https://mail.mozilla.org/listinfo/rust-dev >>> >>> >> >
_______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev