When there are more than one trait to be mixed in, currently we need chain with with
, eg:
new GraphStageLogic(shape) with OutHandler with InHandler
What I expected is
new GraphStageLogic(shape) with OutHandler ,InHandler
If we don’t need the special trait mixin handing.
It’s quit long for Scala 3
3 Likes
Actually, we could even allow it when the order matters,
Since extends A, B
is always valid, even in that case (iirc)
2 Likes
Why do we have two different keywords (extends
and with
) anyway? The use of them seems always forced.
2 Likes
Isn’t the idea that in Scala 3, &
will replace with
? So you would do A extends B & C
1 Like
Not exactly, the details are a bit murky, but this is the general idea:
with
is used for two different things in Scala 2:
-
C extends A with B
: C
has all the members of B
, plus the unshadowed members of C
-
type C = A with B
: again, C
has all the members of B
, plus the unshadowed some members of C
Notably, A with B
is not the same as B with A
But this is not what &
does (and with
in Scala 3 is an alias of &
):
-
C extends A, B
: C
has all the members of B
, plus the unshadowed members of C
-
type C = A & B
: C
has all the members of both A
and B
Notably, A & B
is the same as B & A
See for example
class linearisation spec
2 Likes