File tree 1 file changed +8
-14
lines changed
1 file changed +8
-14
lines changed Original file line number Diff line number Diff line change @@ -243,28 +243,22 @@ to know more about [operator traits][operators-and-overloading].
243
243
# Rules for implementing traits
244
244
245
245
So far, we’ve only added trait implementations to structs, but you can
246
- implement a trait for any type. So technically, we _ could_ implement ` HasArea `
247
- for ` i32 ` :
246
+ implement a trait for any type such as ` f32 ` :
248
247
249
248
``` rust
250
- trait HasArea {
251
- fn area (& self ) -> f64 ;
249
+ trait ApproxEqual {
250
+ fn approx_equal (& self , other : & Self ) -> bool ;
252
251
}
253
-
254
- impl HasArea for i32 {
255
- fn area (& self ) -> f64 {
256
- println! (" this is silly" );
257
-
258
- * self as f64
252
+ impl ApproxEqual for f32 {
253
+ fn approx_equal (& self , other : & Self ) -> bool {
254
+ // Appropriate for `self` and `other` being close to 1.0.
255
+ (self - other ). abs () <= :: std :: f32 :: EPSILON
259
256
}
260
257
}
261
258
262
- 5. area ( );
259
+ println! ( " {} " , 1.0 . approx_equal ( & 1.00000001 ) );
263
260
```
264
261
265
- It is considered poor style to implement methods on such primitive types, even
266
- though it is possible.
267
-
268
262
This may seem like the Wild West, but there are two restrictions around
269
263
implementing traits that prevent this from getting out of hand. The first is
270
264
that if the trait isn’t defined in your scope, it doesn’t apply. Here’s an
You can’t perform that action at this time.
0 commit comments