Scala Library: scala.DelayedInit
scala.DelayedInit
trait DelayedInit extends AnyRef
Classes and objects (but note, not traits) inheriting the DelayedInit
marker
trait will have their initialization code rewritten as follows: code
becomes
delayedInit(code)
.
Initialization code comprises all statements and all value definitions that are executed during initialization.
Example:
trait Helper extends DelayedInit {
def delayedInit(body: => Unit) = {
println("dummy text, printed before initialization of C")
body // evaluates the initialization code of C
}
}
class C extends Helper {
println("this is the initialization code of C")
}
object Test extends App {
val c = new C
}
Should result in the following being printed:
dummy text, printed before initialization of C
this is the initialization code of C
- Annotations
- @ deprecated
- Deprecated
- (Since version 2.11.0) DelayedInit semantics can be surprising. Support
for
App
will continue. See the release notes for more details: https://github.com/scala/scala/releases/tag/v2.11.0-RC1
- (Since version 2.11.0) DelayedInit semantics can be surprising. Support
for
- Source
- See also
- “Delayed Initialization” subsection of the Scala Language Specification (section 5.1)
Abstract Value Members From scala.DelayedInit
abstract def delayedInit(x: ⇒ Unit): Unit
(defined at scala.DelayedInit)
Full Source:
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2010-2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
package scala
/** Classes and objects (but note, not traits) inheriting the `DelayedInit`
* marker trait will have their initialization code rewritten as follows:
* `code` becomes `delayedInit(code)`.
*
* Initialization code comprises all statements and all value definitions
* that are executed during initialization.
*
* Example:
* {{{
* trait Helper extends DelayedInit {
* def delayedInit(body: => Unit) = {
* println("dummy text, printed before initialization of C")
* body // evaluates the initialization code of C
* }
* }
*
* class C extends Helper {
* println("this is the initialization code of C")
* }
*
* object Test extends App {
* val c = new C
* }
* }}}
*
* Should result in the following being printed:
* {{{
* dummy text, printed before initialization of C
* this is the initialization code of C
* }}}
*
* @see "Delayed Initialization" subsection of the Scala Language Specification (section 5.1)
*
* @author Martin Odersky
*/
@deprecated("DelayedInit semantics can be surprising. Support for `App` will continue.\nSee the release notes for more details: https://github.com/scala/scala/releases/tag/v2.11.0-RC1", "2.11.0")
trait DelayedInit {
def delayedInit(x: => Unit): Unit
}
Interested in Scala?
I send out weekly, personalized emails with articles and conference talks.
Subscribe now.