Wu has straight up stolen trait behavior from Rust and Pony. Traits can be thought of as behavior criteria for a struct, defined as a set of methods one can expect to find on a struct.
A trait can be defined like so:
Movable: trait {
move: fun(self, dx: float, dy: foat)
}
Thus, anything that implements Movable
will have to have a method named move
that takes the given parameters on it.
We can implement traits on a struct like this:
Vector: struct {
x: float
y: float
}
implement Vector: Movable {
move: fun(self, dx: float, dy: float) {
self x += dx
self y += dy
}
}
Now, when we try to move a Vector
using the move
method it works perfectly:
point := new Vector {
x: 100
y: 100
}
point move(10, 5)