Add another Complex Type example
This commit is contained in:
@@ -761,7 +761,25 @@ end
|
|||||||
```
|
```
|
||||||
|
|
||||||
Luckily, no changes have to be made to the `do_draw()` function, because the compiler treats the argument solely as `Drawable2D`, and calling `draw()` on it always calls `Drawable2D:draw()`!
|
Luckily, no changes have to be made to the `do_draw()` function, because the compiler treats the argument solely as `Drawable2D`, and calling `draw()` on it always calls `Drawable2D:draw()`!
|
||||||
Again, changing the type from outside would not break a callee.
|
Thus, changing the type from outside would not break a callee.
|
||||||
|
|
||||||
|
The `Point` type now has `draw2d` and `draw3d` methods.
|
||||||
|
Of course, calling `Point:draw()` would not work anymore, because we've moved the implementation.
|
||||||
|
But it is still possible to restrict a `Point` to the required trait and call `draw()` on it.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```text
|
||||||
|
final p = Point()
|
||||||
|
|
||||||
|
# p.draw() # Panic! Ambiguity
|
||||||
|
|
||||||
|
p.draw2d() # OK, draw 2D
|
||||||
|
p~Drawable2D.draw() # OK, draw 2D
|
||||||
|
|
||||||
|
p.draw3d() # OK, draw 3D
|
||||||
|
p~Drawable3D.draw() # OK, draw 3D
|
||||||
|
```
|
||||||
|
|
||||||
Incapsulation at its finest!
|
Incapsulation at its finest!
|
||||||
|
|
||||||
### More Highlights
|
### More Highlights
|
||||||
|
|||||||
Reference in New Issue
Block a user