Methods 定义元组方法
这里有一个用于两个元素元组的Methods 定义元组方法,methods,tuples,rust,Methods,Tuples,Rust,这里有一个用于两个元素元组的swap函数: fn swap<A, B>(obj: (A, B)) -> (B, A) { let (a, b) = obj; (b, a) } 有没有办法将swap定义为两元素元组的方法?也就是说,它可以被称为: (10i, 20i).swap() 是的,有。只需定义一个新特性并立即实施,如下所示: trait Swap<U> { fn swap(self) -> U; } impl<A,
swap
函数:
fn swap<A, B>(obj: (A, B)) -> (B, A)
{
let (a, b) = obj;
(b, a)
}
有没有办法将swap
定义为两元素元组的方法?也就是说,它可以被称为:
(10i, 20i).swap()
是的,有。只需定义一个新特性并立即实施,如下所示:
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());
}
trait交换{
fn交换(自)->U;
}
(A,B)的impl交换{
#[内联]
fn掉期(自)->(B、A){
设(a,b)=自;
(b,a)
}
}
fn main(){
设t=(1u,2u);
println!(“{}”,t.swap());
}
请注意,为了使用此方法,您必须将Swap
trait导入到要调用该方法的每个模块中
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());
}