操作符和重載

2018-08-12 22:03 更新

操作符和重載

Rust 允許有限形式的操作符重載。有一些操作符能夠被重載。為了支持一個(gè)類型之間特定的操作符,有一個(gè)你可以實(shí)現(xiàn)的特定的特征,然后重載操作符。

例如,可以用 Add 特征重載 + 操作符。

use std::ops::Add;

#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}

impl Add for Point {
type Output = Point;

fn add(self, other: Point) -> Point {
Point { x: self.x + other.x, y: self.y + other.y }
}
}

fn main() {
let p1 = Point { x: 1, y: 0 };
let p2 = Point { x: 2, y: 3 };

let p3 = p1 + p2;

println!("{:?}", p3);
}

在 main 函數(shù)中,你可以在兩個(gè) Point之間使用 + 操作符,因?yàn)槲覀兛梢允褂?Point 的方法 Add<Output=Point>。

有許多操作符可以以這種方式被重載,所有的關(guān)聯(lián)特征都在 std::ops 模塊中。看看完整列表的文檔?!   ?/p>

這些特征的實(shí)現(xiàn)遵循一個(gè)模式。讓我們看看 Add 的更多細(xì)節(jié):

pub trait Add<RHS = Self> {
type Output;

fn add(self, rhs: RHS) -> Self::Output;
}

這里總共三種類型包括:impl Add for的類型,默認(rèn)為 Self 的 RSH,還有 Output。一個(gè)表達(dá)式 let z = x + y,x 是 Self 類型,y 是 RSH 類型,還有 z 是 Self::Output 類型。

這可以讓你這樣做:

let p: Point = // ...
let x: f64 = p + 2i32;
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)