Thanks Cody. That was a good explanation! Mohit Jaggi Founder, Data Orchard LLC www.dataorchardllc.com
> On Aug 31, 2016, at 7:32 AM, Cody Koeninger <c...@koeninger.org> wrote: > > 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: dev-unsubscr...@spark.apache.org