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
(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
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
}