We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
I didn't get an answer on the list, so I'll raise a bug.
trait Base { val abstractVal: String final val useAbstractVal = abstractVal } trait T1 extends { val abstractVal = "T1.abstractVal" } with Base class C3 extends T1 assert(new C3().useAbstractVal eq null) // why not == "T1.abstractVal" ?
[[syntax trees at end of icode]]// Scala source: early.scala package <empty> { abstract trait Base extends java.lang.Object with ScalaObject { final <accessor> def Base$$_setter_$$useAbstractVal_=(x$$1: java.lang.String): Unit; <stable> <accessor> def abstractVal(): java.lang.String; final <stable> <accessor> def useAbstractVal(): java.lang.String }; abstract trait T1 extends java.lang.Object with Base with ScalaObject { <accessor> def T1$$_setter_$$abstractVal_=(x$$1: java.lang.String): Unit; <stable> <accessor> def abstractVal(): java.lang.String }; class C3 extends java.lang.Object with T1 with ScalaObject { <stable> <accessor> def abstractVal(): java.lang.String = C3.this.abstractVal; private[this] val abstractVal: java.lang.String = _; <accessor> def T1$$_setter_$$abstractVal_=(x$$1: java.lang.String): Unit = C3.this.abstractVal = x$$1; final <stable> <accessor> def useAbstractVal(): java.lang.String = C3.this.useAbstractVal; private[this] val useAbstractVal: java.lang.String = _; final <accessor> def Base$$_setter_$$useAbstractVal_=(x$$1: java.lang.String): Unit = C3.this.useAbstractVal = x$$1; def this(): C3 = { C3.super.this(); Base$$class./*Base$$class*/$$init$$(C3.this); T1$$class./*T1$$class*/$$init$$(C3.this); () } }; abstract trait Base$$class extends { def /*Base$$class*/$$init$$($$this: Base): Unit = { $$this.Base$$_setter_$$useAbstractVal_=($$this.abstractVal()); () } }; abstract trait T1$$class extends { def /*T1$$class*/$$init$$($$this: T1): Unit = { val abstractVal: java.lang.String = "T1.abstractVal"; $$this.T1$$_setter_$$abstractVal_=(abstractVal); () } } }
http://gist.github.com/253684
The text was updated successfully, but these errors were encountered:
Imported From: https://issues.scala-lang.org/browse/SI-2796?orig=1 Reporter: @retronym
Sorry, something went wrong.
@hubertp said: Yes, the early definition doesn't work for traits initialization ATM and I guess we should provide it.
@retronym said: Until we can fix it, let's issue a warning.
scala/scala#777
@retronym said: Closing; it seems we're more likely to invest in fully blown trait parameters than into expanding early definitions for traits.
retronym
No branches or pull requests
I didn't get an answer on the list, so I'll raise a bug.
http://gist.github.com/253684
The text was updated successfully, but these errors were encountered: