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


Alexander Stavonin wrote:
I want to add function like _1(), _2(), etc for Rust tuple. Unfortunately I do not understand how to tell compiler lifetime of returning result in case of `trait`

pub trait TupleVal<T> {
    pub pure fn _1() -> T;
    pub pure fn _2() -> T;
}

impl <T>(T, T): TupleVal<T> {
    pure fn _1() -> T {
        let (a, _) = self;
        a
    }
    pure fn _2() -> T {
        let (_, b) = self;
        b
    }
}

And the errors:

test.rs:31:21: 31:25 error: moving out of self reference
test.rs:31 <http://test.rs:31>         let (a, _) = self;
                                  ^~~~
test.rs:35:21: 35:25 error: moving out of self reference
test.rs:35 <http://test.rs:35>         let (_, b) = self;
                                  ^~~~
error: aborting due to 2 previous errors

How can I tell the compiler returning values lifetime? Actually it couldn't be more than lifetime of self.
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to