Scala code:

```
trait X

trait Y1 {
  this: X => 
}

trait Y2 extends X {
}

```

I wonder what's the difference between `Y1` and `Y2` traits? If I have a class `Z` need to extend `Y`:

```
class Z1 extend Y1 with X

class Z2 extends Y2

```

It seems there is no difference for the two classes `Z1` and `Z2`. If they are nearly the same, which style would you recommend?