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

Reply via email to