Reputation: 9527
Here's a swap
function for two-element tuples:
fn swap<A, B>(obj: (A, B)) -> (B, A)
{
let (a, b) = obj;
(b, a)
}
Example use:
fn main() {
let obj = (10i, 20i);
println!("{}", swap(obj));
}
Is there a way to define swap
as a method on two-element tuples? I.e. so that it may be called like:
(10i, 20i).swap()
Upvotes: 7
Views: 149
Reputation: 127771
Yes, there is. Just define a new trait and implement it immediately, something like this:
trait Swap<U> {
fn swap(self) -> U;
}
impl<A, B> Swap<(B, A)> for (A, B) {
#[inline]
fn swap(self) -> (B, A) {
let (a, b) = self;
(b, a)
}
}
fn main() {
let t = (1u, 2u);
println!("{}", t.swap());
}
Note that in order to use this method you will have to import Swap
trait into every module where you want to call the method.
Upvotes: 7