« Return to Thread: self type is not inherited

Re: [scala] self type is not inherited

by Sean McDirmid :: Rate this Message:

Reply to Author | View in Thread

Easy, just avoid self types:

trait B {
  def self : A
  protected implicit def coerce(b : this.type) : A = self
}

They don't work on the outside anyways, so I always role my own. Just
remember to close the loop (self = this) when you create a concrete
sub-class.

Sean




On Sun, Oct 12, 2008 at 12:52 AM, Mushtaq Ahmed <mushtaq.a@...> wrote:

>
> Given that,
>
> trait A
> trait B {this: A =>}
>
> Each time we extend B, we need to explicitly specify the self type as A:
>
> trait C extends B {this: A =>}
> trait D extends B {this: A =>}
> trait E extends B {this: A =>}
>
> Can't this repetition be avoided? Shouldn't self type of C, D and E default
> to A unless explicitly specified otherwise? Currently, this gives the
> following error:
>
> trait F extends B
> error: illegal inheritance; self-type F does not conform to B's selftype B
> with A
>
> Regards,
> Mushtaq
> --
> View this message in context: http://www.nabble.com/self-type-is-not-inherited-tp19934242p19934242.html
> Sent from the Scala mailing list archive at Nabble.com.
>
>

 « Return to Thread: self type is not inherited