官术网_书友最值得收藏!

Methods

We can add methods on custom types. Let's write a method to compute the distance of a point to the origin:

impl Point {
    fn dist_from_origin(&self) -> f64 {
        let sum_of_squares = self.x.pow(2) + self.y.pow(2);
        (sum_of_squares as f64).sqrt()
    }
}

There are a lot of new syntaxes here (impl Point, as, and .method()), so let's explain all of them. First of all, methods of a type are declared within the impl Type {} construct. This method takes a special parameter: &self. This parameter is the instance the method is called on, like this in other programming languages. The & operator before self means that the instance is passed by immutable reference. As we can see, it is possible to call methods on basic types in Rust—self.x.pow(2) computes the power of two of the x field. We can find this method, and many others, in the documentation, at https://doc.rust-lang.org/stable/std/primitive.i32.html#method.pow . In the last expression of the method, we cast the sum_of_squares integer to f64 before computing its square root, because the sqrt() method is defined only on floating points.

Let's create a method that will update the fields of the structure:

impl Point {
    fn translate(&mut self, dx: i32, dy: i32) {
        self.x += dx;
        self.y += dy;
    }
}

The difference with the previous method is that self is now a mutable reference, &mut.

主站蜘蛛池模板: 朝阳区| 金寨县| 蛟河市| 尼勒克县| 建宁县| 沾化县| 安达市| 本溪| 昆明市| 临沭县| 米泉市| 丰台区| 旬邑县| 楚雄市| 磐安县| 肇州县| 阿图什市| 弥渡县| 抚州市| 陆河县| 黎川县| 工布江达县| 石首市| 南涧| 巨野县| 桦南县| 鄂州市| 罗定市| 桐柏县| 丽江市| 江安县| 上林县| 钟山县| 威远县| 长寿区| 高要市| 桐柏县| 铜山县| 泉州市| 张家口市| 通江县|