なぜこれが機能しないのですか?
scala> trait A
defined trait A
scala> class Z {
| this: A =>
| }
defined class Z
scala> class Y {
| this: A =>
| val z = new Z()
| }
<console>:11: error: class Z cannot be instantiated because it does not conform to its self-type Z with A
val z = new Z()
Yに混合されたAをYのZのインスタンスに再び混合したいのですが、どうすればよいですか?
編集(上記の例では簡潔になりすぎていました。これが私の実際の問題です):
scala> import scala.slick.driver.ExtendedProfile
import scala.slick.driver.ExtendedProfile
scala> class Z {
| this: ExtendedProfile =>
| }
defined class Z
scala> class Y {
| this: ExtendedProfile =>
| val z = new Z() with ExtendedProfile
| }
<console>:21: error: illegal inheritance;
self-type Z with scala.slick.driver.ExtendedProfile does not conform to scala.slick.driver.ExtendedProfile's selftype scala.slick.driver.ExtendedDriver
val z = new Z() with ExtendedProfile
^
なぜそれがコンパイルされないのか理解していると思いますが、これは暗黙的であるべきではありません(実際のscalaキーワード'implicit'ではなく、一般的に暗黙的です;))?ExtendedProfileに常にExtendedDriverが必要な場合、なぜnew Z()がExtendedDriverが必要であると文句を言うのですか?
参考:http ://slick.typesafe.com/doc/1.0.0-RC1/api/#scala.slick.driver.ExtendedProfile