http://blog.originate.com/blog/2014/02/27/types-inside-types-in-scala/
On Wed, Aug 31, 2016 at 2:19 AM, Sean Owen <so...@cloudera.com> wrote: > Weird, I recompiled Spark with a similar change to Model and it seemed > to work but maybe I missed a step in there. > > On Wed, Aug 31, 2016 at 6:33 AM, Mohit Jaggi <mohitja...@gmail.com> wrote: >> I think I figured it out. There is indeed "something deeper in Scala” :-) >> >> abstract class A { >> def a: this.type >> } >> >> class AA(i: Int) extends A { >> def a = this >> } >> >> the above works ok. But if you return anything other than “this”, you will >> get a compile error. >> >> abstract class A { >> def a: this.type >> } >> >> class AA(i: Int) extends A { >> def a = new AA(1) >> } >> >> Error:(33, 11) type mismatch; >> found : com.dataorchard.datagears.AA >> required: AA.this.type >> def a = new AA(1) >> ^ >> >> So you have to do: >> >> abstract class A[T <: A[T]] { >> def a: T >> } >> >> class AA(i: Int) extends A[AA] { >> def a = new AA(1) >> } >> >> >> >> Mohit Jaggi >> Founder, >> Data Orchard LLC >> www.dataorchardllc.com >> >> > > --------------------------------------------------------------------- > To unsubscribe e-mail: user-unsubscr...@spark.apache.org > --------------------------------------------------------------------- To unsubscribe e-mail: user-unsubscr...@spark.apache.org