We've made a struct that represents a circle. We then write an `impl` block,
and inside it, define a method, `area`. Methods take a special first
-parameter, `&self`. There are three variants: `self`, `&self`, and `&mut self`.
+parameter, of which there are three variants: `self`, `&self`, and `&mut self`.
You can think of this first parameter as being the `x` in `x.foo()`. The three
variants correspond to the three kinds of thing `x` could be: `self` if it's
just a value on the stack, `&self` if it's a reference, and `&mut self` if it's
std::f64::consts::PI * (self.radius * self.radius)
}
- fn grow(&self) -> Circle {
- Circle { x: self.x, y: self.y, radius: (self.radius * 10.0) }
+ fn grow(&self, increment: f64) -> Circle {
+ Circle { x: self.x, y: self.y, radius: self.radius + increment }
}
}
let c = Circle { x: 0.0, y: 0.0, radius: 2.0 };
println!("{}", c.area());
- let d = c.grow().area();
+ let d = c.grow(2.0).area();
println!("{}", d);
}
```
```
We just say we're returning a `Circle`. With this method, we can grow a new
- circle with an area that's 100 times larger than the old one.
+ circle to any arbitrary size.
## Static methods