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;
^~~~~~
On Feb 1, 2013, at 11:38 PM, Niko Matsakis <[email protected]> wrote:
> What you want is something like this (and corresponding changes to the impl):
>
> pub trait TupleVal<T> {
> pub pure fn _1(&self) -> &self/T;
> pub pure fn _2(&self) -> &self/T;
> }
>
> The `&self` declaration is called an "explicit self" declaration. What you
> have currently written is called "implicit self" and is deprecated. Explicit
> self also tells the compiler what sort of pointer you expect: in this case, a
> borrowed pointer to the receiver. The lifetime of this borrowed pointer is
> always called "self". Therefore, the return type `&self/T` says: "a pointer
> with the same lifetime as the receiver to T".
>
> Note that this syntax is likely to change in the future, although the precise
> form is not yet finalized. I suspect it will be something like:
>
> pub trait TupleVal<T> {
> pub pure fn _1(&'v self) -> &'v T;
> pub pure fn _2(&'v self) -> &'v T;
> }
>
> which makes the connection between the lifetime of the self pointer and the
> lifetime of the return value more explicit.
>
>
> Niko
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev