I made changes as you told me: 1 pub trait TupleVal<T> { 2 pub pure fn _1(&self) -> &self/T; 3 /*pub pure fn _2(&self) -> &self/T;*/ 4 } 5 6 impl <T>(T, T): TupleVal<T> { 7 pure fn _1(&self) -> &self/T { 8 let &(a, _) = self; 9 &a 10 } 11 /*pure fn _2(&self) -> &self/T {*/ 12 /*let &(_, b) = self;*/ 13 /*&b*/ 14 /*}*/ 15 } 16 17 fn main() { 18 let pair = (1, 2); 19 let left = *pair._1(); 20 io::println(fmt!("pair left: %u", left)); 21 /*let r = pair._2();*/ 22 }
But: test.rs:9:9: 9:10 error: illegal borrow: borrowed value does not live long enough test.rs:9 &a ^ test.rs:7:33: 10:5 note: borrowed pointer must be valid for the lifetime &self as defined on the block at 7:33... test.rs:7 pure fn _1(&self) -> &self/T { test.rs:8 let &(a, _) = self; test.rs:9 &a test.rs:10 } test.rs:7:33: 10:5 note: ...but borrowed value is only valid for the block at 7:33 test.rs:7 pure fn _1(&self) -> &self/T { test.rs:8 let &(a, _) = self; test.rs:9 &a test.rs:10 } error: aborting due to previous error Did I miss something? On Feb 2, 2013, at 9:08 AM, Niko Matsakis <n...@alum.mit.edu> wrote: > You need "let (a, _) = *self" or "let &(a, _) = self". self is a pointer to > a tuple, not a tuple. > > > Niko > > Alexander Stavonin wrote: >> >> Thank you! But I still can not compile it: >> >> >> 1 pub trait TupleVal<T> { >> 2 pub pure fn _1(&self) -> &self/T; >> 3 pub pure fn _2(&self) -> &self/T; >> 4 } >> 5 >> 6 impl <T>(T, T): TupleVal<T> { >> 7 pure fn _1(&self) -> &self/T { >> 8 let (a, _) = self; >> >> 9 a >> 10 } >> 11 pure fn _2(&self) -> &self/T { >> 12 let (_, b) = self; >> 13 b >> 14 } >> 15 } >> >> test.rs:8:12: 8:18 error: mismatched types: expected `&self/('a,'a)`, found >> tuple >> test.rs:8 let (a, _) = self; >> ^~~~~~ _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev